メインコンテンツまでスキップ

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)
}

Go Playground

より詳しい情報は 公式の言語仕様書 に載っています

メソッド

レシーバーをつけた関数をメソッドと呼びます

普通の関数の例

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()
}

Go Playground

より詳しい情報は 公式の言語仕様書 に載っています

スライス

スライスは配列に似ていますが、長さを実行中に変更できるという点があります
他の言語でもよくある可変長配列のようなものです

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
}

Go Playground

また、スライスはmake組み込み関数によって初期化もできます

a := make([]int, 10)    // 長さを10に指定
b := make([]int, 0, 10) // 長さを0にキャパシティを10に指定

より詳しい情報は 公式の言語仕様書 に載っています