私は現在golang(主にJava/C#開発者)を勉強しています。Golangポインタが構造体内でどのように保持されるかについての混乱
私はOOのようなスタイルの構造体の下にCSVファイルへの書き込みをラップしようとしています。
がtype MyObject struct {
fp *os.File
csv *csv.Writer
}
func (mo MyObject) Open(filepath string) {
println(&mo)
var err error
mo.fp, err = os.Create(filepath)
if err != nil {
panic(err)
}
mo.csv = csv.NewWriter(mo.fp)
}
私はかつて私は、Openメソッドを残したヒット問題は、FPおよびCSVのためのポインタが戻った:私はオンラインで見つけるの例から、構造体の「メソッド」を作成そうのように行うことができるようですnullにするこのクラスへの後続の呼び出しは、nilエラーをスローします。完全な例はhereです。
多くのグーグルの後、私はゴランがどのようにloggerを実装したかを調べました。彼らはとても似オブジェクトへのポインタを使用:
type MyObject struct {
fp *os.File
csv *csv.Writer
}
func New() *MyObject {
return &MyObject{}
}
func (mo *MyObject) Open(filepath string) {
println(&mo)
var err error
mo.fp, err = os.Create(filepath)
if err != nil {
panic(err)
}
mo.csv = csv.NewWriter(mo.fp)
}
私のコードのリファクタリング期待どおりに動作を示す(hereを参照してください)。私はまだ最初の方法がうまくいかなかったのに、まだ混乱しています。私は、構造体、ポインタ、および/または作業を延期する方法について何かを誤解していると思います。私は何が欠けていますか?
https://golang.org/doc/faq#methods_on_values_or_pointersに –