Go言語学習(ポインタ、構造体、メソッド)
Go におけるポインタとポインタ型
// var 変数名 *型名
var foo *string
変数宣言時、型名の先頭に *
をつけるとポインタ型になる。
ポインタ型はメモリアドレスなので、どの型でもサイズが同じ。 ポインタ変数に型を指定する理由は、間接参照したときに本来の値が持つ型を意識する必要があるため。
構造体
JS でいう協議のオブジェクトに近いという理解をした。
宣言は struct
でおこなう。
struct {
fieldName fieldType
}
構造体は宣言しただけでは使えない。実際に値を入れるには、構造体変数を宣言する。
var hoge struct {
foo string
bar int
}
hoge.foo = "Hi"
hoge.bar = "10
上記を簡略化するとこんな感じ。
各フィールドの後には ,
をつける。最後のフィールドにたいしてもつける。
var hoge:= struct {
foo string
bar int
} {
foo: "Hi",
bar: 10,
}
type
type
修飾子を使うと、構造体に名前をつけることできる。(構造体だけに用いるものでもない)
type Hoge struct {
foo string
bar int
}
hogeVar1 := Hoge(
foo: "Hello!"
bar: 15
)
hogeVar2 := Hoge(
foo: "Good night"
bar: 99
)
メソッド
Go にもメソッドはあるが、クラスにたいしてメソッドを紐付けるのではなく、型に対してメソッドを紐付ける。
type Hoge struct {
foo string
bar int
}
// func (レシーバ値 レシーバー型) メソッド名(引数名 引数型) 戻り値 { }
func (h Hoge) sayHello() {
fmt.Println("Hello!")
}
型から作成した変数(構造体)でメソッドを使う
型にメソッドをつけると、その型から作成した変数(構造体)でも同じメソッドを使える。
fooMan := Hoge {,"HogeHoge---", 10}
fooMan.sayHello();
// => Hello!