たんなるメモです
Go言語のスライス
Go言語にはもちろん配列もあるけれど、スライスというのがある。めっちゃ乱暴にいうと可変長配列。むずかしいことはわかりません。参考になるのはこれです。
参照のスライスがつくれる
配列同様、任意の型のスライスがつくれる。もちろん参照も。
var users []*User
[https://twitter.com/otiai10/status/479602702469439488:embed#ん?Someはあるけど、Someはあるのか?]
スライスの参照と参照のスライスは違うのか
http://play.golang.org/p/GlGnXZtkdp
package main import "fmt" import "reflect" type Some struct {} func main() { var sl []*Some sl = append(sl, &Some{}) fmt.Printf("%T, %+v\n", sl, sl) var sl2 *[]Some sl2 = &[]Some{Some{}} fmt.Printf("%T, %+v\n", sl2, sl) // fmt.Println((sl == sl2)) // invalid operation: sl == sl2 (mismatched types []*Some and *[]Some) fmt.Println(reflect.DeepEqual(sl, sl2)) sl2_ := *sl2 fmt.Println((sl[0] == &sl2_[0])) fmt.Println((*sl[0] == sl2_[0])) }
そのけっか
[]*main.Some, [0x1beed0] *[]main.Some, [0x1beed0] false true true
まあ、reflect.DeepEqual
は配列やスライス、オブジェクトなどを再帰的に比較するだけなので、falseになるのはわかる。
最後の2行は、右辺の値型のものの参照(&
)にしたり、左辺の参照型のものを値に(*
)したりしてる。
要素の指してる場所はいっしょだと思っていいのかな
DRYな備忘録