Goのポインタに対する自分なりの理解 #345
今日はライブに行ってきたので分量少なめですが、朝起きて勉強するのも悪くないですな。
Golang
他言語からきた人が一番ハマりそうなポインタ。案の定僕もハマったというか何を言ってるのか理解するのに時間を要してしまったので自分なりの理解を書いておく。(まだ学習途中なので、正確性に欠けるかもしれない。もう少しわかるようになったらQiitaとかに移植するのもありかもな)
前提
Goはポインタを使わない場合は全て値渡し
package main import ( "fmt" ) // strの中身をHello worldに書き換える func override(str string) string { str = "Hello world" return str } func main() { str := "Good morning!" fmt.Println(override(str)) fmt.Println(str) }
これを実行すると
Hello world Good morning!
となる。(つまり元の変数が書き換わっていないことがわかる)
ポインタを使う
先ほどのmain.go
のoverride
をポインタを使った形に書き換えると以下のようになる。
package main import ( "fmt" ) // strの中身をHello worldに書き換える func override(str *string) string { *str = "Hello world" return *str } func main() { str := "Good morning!" fmt.Println(override(&str)) fmt.Println(str) }
これを実行すると
Hello world Hello world
となり、main
で宣言されているstr
の中身が書き換わっていることがわかる。(=参照渡し)
参照渡しする必要がある時に使うっていう認識で良いのだろう、多分。
ポインタの使い方
- 変数
T
のポインタは*T
&
オペレーターはその変数へのポインタを引き出す&i
とするとi
へのポインタを引き出すことができる
*
オペレーターはポインタが指す先の変数を引き出すことができる
なぜか最後だけ画像で手書きだけど気にしない。
分かってしまえばなんてことなくて、むしろ参照渡しなのか値渡しなのかを書いてて正確に把握できるのでいいのではないかと思った。
ちなみにレシーバーの指定もポインタを使うと参照渡しになる。
ライブ
技術全然関係ないけどライフログとして触れておく。
江戸川区の総合文化センターで行われたでんぱ組のライブに行ってきました。全国ツアーの東京公演って感じの位置付け。
今まで行ったライブは武道館→大阪城ホールと比較的大きい会場ばかりだったので、小さな会場で行われるライブは初めてでした。これはこれでよいものだなぁと思いました。(今回9列目の座席でしたが、普通にステージまで遮るものが何もなくて最高でした)
序盤のムーンライト伝説はアレンジ含めて最高だったのでどっかの円盤に収録してほしい…と行った気持ち。
最後にオタクピクチャーでも貼っておきます。
ただのヒョロいオタクになってしまった pic.twitter.com/3QwJW7OCry
— ううたろ (@uutarou10) 2018年4月30日
我ながら気持ち悪いな
雑談
研究室いくことを前提にペースを作ってたので連休なんか厳しいな。研究室行っちゃおうかしら。