func main() { xs := []int{1, 2, 3} var cmds []func() for _, x := range xs { cmds = append(cmds, func() { fmt.Println(x) }) fmt.Println("append: " + strconv.Itoa(x)) for _, cmd := range cmds { fmt.Print("func eval: ") cmd() } fmt.Println() } }
![Goのfor文で関数のリストを作ろうとして嵌った話 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/01c022a192bb3001f77a9761cb0b57522959fcb4/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9R28lRTMlODElQUVmb3IlRTYlOTYlODclRTMlODElQTclRTklOTYlQTIlRTYlOTUlQjAlRTMlODElQUUlRTMlODMlQUElRTMlODIlQjklRTMlODMlODglRTMlODIlOTIlRTQlQkQlOUMlRTMlODIlOEQlRTMlODElODYlRTMlODElQTglRTMlODElOTclRTMlODElQTYlRTUlQjUlOEMlRTMlODElQTMlRTMlODElOUYlRTglQTklQjEmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtY2xpcD1lbGxpcHNpcyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTEzYjk4ODA0MDFhYTVjNzlmODE0MmM1MjliZDE5NWY2%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwa29kdWtpJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz01N2QxMjJjOGVkNzgwMmM0ZGM0NzhmNzUzYTVjN2M2Yw%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D736a0ac1e9f687a59495a9a11b4534a9)
type slice struct { head int, tail int, data []interface{} } のようになっていて、先頭と最後へのポインタと配列へのポインタを持っていて、hoge[1:5]のようにslice演算をするとheadとtailだけ書き換えて、データはそのまま。 また、append関数はdataのキャパシティを超えた場合にreallocのようなことをしてデータ容量を拡張する。 package main import ( "fmt" ) var P = fmt.Println func main() { a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} b := a[0:5] a[0] = 100 c := append(b, 200) //aの6つ目のデータを上書き P("a", a) //a [100 2 3 4 5 2
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く