Code & Book
golang

【Golang】Go言語_基本的な文法まとめ

go公式ドキュメント

実行方法

Hello Worldをprintするのみの処理

package main

import "fmt"

//起点となる関数は「main」と言う名前の関数名で固定、呼び出された時にmainが実行される
func main(){
	fmt.Println("Hello World")
}

>> Hello World

実行方法

// go拡張子のファイルをコンパイルする。同階層にコンパイルされたバイナリファイルが生成される。
go build {コンパイルするファイル名}

// コンパイルされたファイルを実行する
./{コンパイル後のファイル名}

// コンパイルと実行を同時に行う
go run {実行するファイル名}

変数・定数の宣言

package main

import "fmt"

func main(){
	var a int = 1 	// 変数の宣言
	b := 2 // 型宣言なしで変数の定義。
	const pi = 3.14 // 定数
	
	const( // まとめて宣言
		height float32 = 170.2
		weight float32 = 70.2
	)

	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(pi)
	fmt.Println(height)
	fmt.Println(weight)

}

>>> 1
>>> 3
>>> 3.14
>>> 170.2
>>> 70.2

配列

package main

import "fmt"


func main(){
	var a [2]int // 配列の宣言
	a[0] = 1
	a[1] = 2
	
	var b []int = []int{1, 2} // 宣言と同時に値を入れる
	b = append(b, 3) //配列に値の追加。配列のサイズは変更できないが、最初にサイズを宣言しなかった場合は変更可

	fmt.Println(a)
	fmt.Println(b)
}

>>> [1 2]
>>> [1 2 3]

map

pythonでいうdictのようなもの、キーと値がセットになっている。

package main

import "fmt"

func main(){
	m := map[string]int{"udon": 100, "soba": 200}
	m["ramen"] = 300 // 値の更新
	fmt.Println(m)
}

>>> map[ramen:300 soba:200 udon:100]

関数

package main

import "fmt"

func add(x int, y int) int {
	return x + y
}

func main(){
	a := add(10, 20)
	fmt.Println(a)
}

>>> 30

返り値の記載の省略

package main

import "fmt"

// 返り値のアノテーションで変数の宣言と返り値の指定をできる
func substract(x, y int) (result int){
	result = x - y
	return // アノテーションで指定しているので省略できる
}

func main(){
	a := substract(30, 10)
	fmt.Println(a)
}

>>> 20

無名関数

pythonでいうlambdaのような書き方

package main

import "fmt"

func main(){
	
	// 簡易的に関数を宣言できる
	f := func(){
		fmt.Println("poyo")
	}
	f()
}

>>> poyo

可変長引数

package main

import "fmt"

// 可変長引数
func arg_print(args ...int){
	for _, arg := range args{
		fmt.Println(arg)
	}

}

func main(){
	arg_print(10, 20)

	s := []int{1,2,3}
	arg_print(s...) // リストの中身を展開して入れてる
}

>>> 10
>>> 20
>>> 1
>>> 2
>>> 3

if文

package main

import "fmt"


func main(){
	num := 100
	if num % 2 == 0{
		fmt.Println("2で割り切れる")
	} else if num % 5 == 0{
		fmt.Println("2で割り切れないが5で割り切れる")
	} else{
		fmt.Println("2でも5でも割り切れない")
	}
}

for文

package main

import "fmt"


func main(){
	for i:=0; i < 10; i++{
		if i == 3{
			fmt.Println("continue")
			continue
		}
		if i == 5{
			fmt.Println("break")
			break
		}		
		fmt.Println(i)
	}
}

>>> 0
>>> 1
>>> 2
>>> continue
>>> 4
>>> break

range

listをfor文に組み込む

package main

import "fmt"


func main(){	
	var l []string = []string{"a", "b", "c"}
	for i, v := range l{
		fmt.Println(i, v)
	}	
}

// 0 a
// 1 b
// 2 c

無限ループ

package main

import "fmt"

func main(){	
	for {
		fmt.Println("無限ループ") // for文だけだと無限ループになる
	}
}

swtich文

package main

import "fmt"

func main(){
	food := "ringo"
	switch food{
	case "ringo":
		fmt.Println("ringo")
	case "banana":
		fmt.Println("banana")
	default:
		fmt.Println("sonota")
	}

}

おわり

最近go言語を触り始めてみたので基本的な文法をまとめてみました。
goは型に対して制約が厳しい印象だったので型推論で変数を宣言できるところは意外だった。
現場で書く時はどのように書くのかな。

ではまた。( ´ ▽ ` )