현재 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로. 이후에이 클래스를 호출하면 오류가 발생합니다. 전체 예제는 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에게 –