Goの文法
Goの文法についていくつか紹介します
各文法についてのより詳しい情報は 公式の言語仕様書 に載っています
(ただ読むために多少の知識が要求されるので普通に日本語の記事とか検索したほうが手っ取り早いかも知れません)
構造体
C言語には構造体がありましたが、それと似たようなものがGo言語にもあります
struct {
a int
b string
}
のように、いくつかのフィールド(名前付き要素)を保持できます
type
キーワードを使用した型宣言によって、構造体を使用した型を作成できます
例
package main
import "fmt"
type Hoge struct {
a int
b string
}
func main() {
hoge := Hoge{
a: 1
b: "bbb"
}
fmt.Println(hoge.a, hoge.b)
}
より詳しい情報は 公式の言語仕様書 に載っています
メソッド
レシーバーをつけた関数をメソッドと呼びます
普通の関数の例
func Hello() {
fmt.Println("Hello")
}
レシーバーをつけた関数の例
func (i MyInt) Hello() {
fmt.Println("Hello")
}
このi MyInt
で宣言された変数であるi
がレシーバーです
メソッドはレシーバーの型に対して紐付けられます
package main
import "fmt"
type MyInt int
func (i MyInt) Hello() {
fmt.Println("Hello")
}
func main() {
var a MyInt
a.Hello()
}
より詳しい情報は 公式の言語仕様書 に載っています
スライス
スライスは配列に似ていますが、長さを実行中に変更できるという点があります
他の言語でもよくある可変長配列のようなものです
var array [3]int // 配列
var slice []int // スライス
package main
import "fmt"
func main() {
var slice = []int{1, 2}
fmt.Println(append(slice, 3)) // ok
var array = [2]int{1, 2}
fmt.Println(append(array, 3)) // error
}
また、スライスはmake
組み込み関数によって初期化もできます
a := make([]int, 10) // 長さを10に指定
b := make([]int, 0, 10) // 長さを0にキャパシティを10に指定
より詳しい情報は 公式の言語仕様書 に載っています