2016-09 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
話題になっていたので、読んでみました。
[2015-02-11-1] で Go を学んだ私ですが、その後あまり使っていなかっ
たので、情報をアップデートできて良かったです。
特に第1章の開発環境のあたり。goimports の import 自動挿入は良いで
すね。早速 go get して init.el に以下を設定しました(go-mode.el は
導入済み)。
(setq gofmt-command "goimports")
第6章のテストも即戦力になりそうです。
以下は読んでメモった箇所を中心にしたまとめです。
Go の文法が多少分かる方向けの本だと思います。P.19 にも書いてある
「A Tour of Go」などをやった後に読むと効果的だと思います。
ただ、世間でオススメされている「A Tour of Go」ですが、私はチュート
リアルとしては難しいと思います。半分くらいから Go よりアルゴリズム
のチュートリアルっぽくなってくるので。
個人的には [2015-02-11-1] で紹介した『WEB+DB PRESS Vol.82』の「は
じめてのGO」がオススメです。
動かないコードがあったのは残念でした。
例えば第5章 reflect の P.108 です。コードを書いて動かすと、
package main import ( "fmt" "reflect" ) type Point struct { X int Y int } func main() { p := &Point{X: 10, Y: 5} rv := reflect.ValueOf(p) fmt.Printf("rv.Type = %v\n", rv.Type()) fmt.Printf("rv.Kind = %v\n", rv.Kind()) fmt.Printf("rv.Interface = %v\n", rv.Interface()) xv := rv.Field(0) // (1) fmt.Printf("xv = %d\n", xv.Int()) xv.SetInt(100) // (2) fmt.Printf("xv (after SetInt) = %d\n", xv.Int()) }
(1) で panic を起こしてしまいます。
rv.Type = *main.Point
rv.Kind = ptr
rv.Interface = &{10 5}
panic: reflect: call of reflect.Value.Field on ptr Value
"p := Point{X: 10, Y: 5}" に変えても (2) で panic が起きます。
rv.Type = main.Point
rv.Kind = struct
rv.Interface = {10 5}
xv = 10
panic: reflect: reflect.Value.SetInt using unaddressable value
P.115 の最初のコードも動きませんでした。
package main import "reflect" type Point struct { X int Y int } func main() { p := Point{X: 10, Y: 5} rv := reflect.ValueOf(&p) if f := rv.Field(0); f.CanSet() { f.SetInt(100) } }
panic: reflect: call of reflect.Value.Field on ptr Value
1.6 なら動くのかしら...? 1.7 は 8/15 に出たばかりだし。
$ go version go version go1.7.1 darwin/amd64
読んでいて誤植が多いなと思いました。査読に時間を割けなかったのです
かね?
サポートページに挙げられているもの以外には、以下を見つけました。
P.115
(誤) いったいどいうことでしょう。
(正) いったいどういうことでしょう。
P.134
(誤) reflectパッケージについては第2章をご覧ください。
(正) reflectパッケージについては第5章をご覧ください。
正誤表自体の間違いも見つけました。
reflect.SelectCase のページは P.97 ではなく P.117 ですね。
2016-09 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
最終更新時間: 2016-09-25 21:02