Golangでのつまずき その2
実践Go言語の説明を読んで実際にコードに書いて動作を確認したときにつまづいたポイントをまとめた。
埋め込みの動作確認でコンパイルエラー
また、埋込みを使うことで少し扱いやすくもなります。下の例では、通常の名前付きフィールドと並んで、埋込みフィールドを記述しています。
type Job struct { Command string *log.Logger }
これでJob型は、*log.Logger型が持つLog、Logfといったメソッドを持つようになりました。もちろん、Loggerにフィールド名を与えることはできますが、それは必須ではありません。これで一度初期化すればJobのログが記録できるようになります。
job.Log("starting now...")
この動作確認のため、以下のようなコードを書いた。
package main import "log" type Job struct { Command string *log.Logger } func main() { job := new(Job) job.Command = "aaa" job.Log("hoge") }
コンパイル結果はjob.Log undefined (type *Job has no field or method Log)
になった。
少なくとも、log
の中でLog
関数が定義されているらしき場所は見つからなかった。
説明の中で触れているlog
が組み込みのlog
ではなかったのか、手元のGoのバージョンでlog
の振る舞いが変わったのか。