お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2022-03-08

Go言語学習(ポインタ、構造体、メソッド)

Go におけるポインタとポインタ型

go
1// var 変数名 *型名
2var foo *string
3

変数宣言時、型名の先頭に * をつけるとポインタ型になる。

ポインタ型はメモリアドレスなので、どの型でもサイズが同じ。 ポインタ変数に型を指定する理由は、間接参照したときに本来の値が持つ型を意識する必要があるため。

構造体

JS でいう協議のオブジェクトに近いという理解をした。 宣言は struct でおこなう。

go
1struct {
2	fieldName fieldType
3}
4

構造体は宣言しただけでは使えない。実際に値を入れるには、構造体変数を宣言する。

go
1var hoge struct {
2	foo string
3	bar int
4}
5hoge.foo = "Hi"
6hoge.bar = "10
7

上記を簡略化するとこんな感じ。 各フィールドの後には , をつける。最後のフィールドにたいしてもつける。

go
1
2var hoge:= struct {
3	foo string
4	bar int
5} {
6	foo: "Hi",
7	bar: 10,
8}
9

type

type 修飾子を使うと、構造体に名前をつけることできる。(構造体だけに用いるものでもない)

go
1type Hoge struct {
2	foo string
3	bar int
4}
5
6hogeVar1 := Hoge(
7	foo: "Hello!"
8	bar: 15
9)
10
11hogeVar2 := Hoge(
12	foo: "Good night"
13	bar: 99
14)
15
16

メソッド

Go にもメソッドはあるが、クラスにたいしてメソッドを紐付けるのではなく、型に対してメソッドを紐付ける。

go
1
2type Hoge struct {
3	foo string
4	bar int
5}
6
7// func (レシーバ値 レシーバー型) メソッド名(引数名 引数型) 戻り値 { }
8func (h Hoge) sayHello() {
9	fmt.Println("Hello!")
10}
11

型から作成した変数(構造体)でメソッドを使う

型にメソッドをつけると、その型から作成した変数(構造体)でも同じメソッドを使える。

go
1
2fooMan := Hoge {,"HogeHoge---", 10}
3
4fooMan.sayHello();
5// => Hello!
6
7
8

よかったらシェアしてください!