0
0

Goに入門

Last updated at Posted at 2024-02-13

サーバー作りたいのでGoで書いてみる:grinning:
まずはGoの基本的な書き方を確認:star:

実行

.goのあるフォルダでコマンド実行

go run .

エントリーポイント

main関数がGoのエントリーポイントとなる

package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

パッケージ

標準ライブラリをパッケージとして読み込んで使う(多分:baby_tone2:
Standard libraryに色々載ってる

import "fmt"

複数を読み込むときの書き方

// 一つずつ宣言しても良い
import "fmt"
import "reflect"

import (
    "fmt"
    "reflect"
)

数値型

var num int
num = 1
num1 := 1

num2 := 123
var num3 int = 12345678

浮動小数点

num4 := 1.23
var num5 float64 = 1.2233

// データ型を確認
fmt.Println(reflect.TypeOf((num5)))

文字列

var string1 string = "hello"
string2 := "good morning"

Boolean

a := 10
b := 1
var num_bool bool = a > b	

配列

arry := [3]string{"Tom", "Ken", "Mary"}
arry[1] = "Jim"

// 省略記法
arryB := [...]string{"Tom", "Ken", "Mary"}
fmt.Println(arryB[0])

// 2次元配列
arryC := [2][2]string{{"1", "2"}, {"3", "4"}}
fmt.Println(arryC[0][0])
fmt.Println(arryC[0][1])
fmt.Println(reflect.TypeOf(arryC))

if 文

age := 5
if age >= 2 {
    fmt.Println("adult")
} else if age == 0 {
    fmt.Println(("baby"))
} else {
    fmt.Println(("child"))
}

// 簡易文を使ったifステートメント(セミコロンで区切る)
if age := 30; age >= 20 {
    fmt.Println("adult")
} else if age == 0 {
    fmt.Println(("baby"))
} else {
    fmt.Println(("child"))
}

for 文

for文しかないらしい

// for文1
for i := 0; i <= 4; i++ {
    fmt.Println(i)
}

// for文2
i := 0
for i <= 4 {
    fmt.Println(i)
    i++
}

// for文3
i := 0
for {
    fmt.Println(i)
 	if i == 4 {
 		break
	}
 	i++
}

関数

// 引数なし
func sayHello() {
 	fmt.Println("hello")
}

// 引数あり
func sayHello(greeting string) {
	fmt.Println(greeting)
}

// 引数が同じデータ型の場合は省略できる
// func cal(x int, y int) {
func cal(x, y int) {
	fmt.Println(x * y)
}

// 戻り値があれば戻り値の型も必要
func cal2(x, y int) int {
	return x * y
}

// Pythonのように戻り値を複数返せる
func cal3(x, y int) (int, int) {
	return (x / y), (x * y)
}

func cal4(x, y int) (int, int) {
	a := x / y
	b := x * y
	return a, b
}

// 戻り値を宣言している場合、returnの引数は省略可能
func cal5(x, y int) (a int, b int) {
	a = x / y
	b = x * y
	return
}

func main() {
    // 無名関数 jsの即時関数みたいな書き方
	func(greeting string) {
		fmt.Println(greeting)
	}("hello")
}

構造体

Goにクラスはない

// 構造体
type Person struct {
	name string
	age  int
}

func main() {
	// 構造体の初期化
	var person Person
	person.name = "Tom"
	person.age = 20
	fmt.Println((person))

    // 構造体の初期化2
    person2 := Person{"Ken", 15} // 順不同
    fmt.Println((person2))

    // 構造体の初期化3 フィールド名の指定
    person3 := Person{name: "Foo", age: 30}
    fmt.Println((person3))
 }

メソッドの定義

type Student struct {
	name string
	age  int
}

// 構造体にメソッドを定義
func (s Student) printName() {
	fmt.Println(s.name)
}

func main() {
	student := Student{name: "Make", age: 10}
	student.printName() // Make
 }

Reference

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0