3 回答

TA貢獻(xiàn)1810條經(jīng)驗 獲得超5個贊
我已經(jīng)研究過這個主題,我認(rèn)為如果您更改為 Employee 而不是 *Employee,那么 EmployeeByID(id) 將是一個無法尋址的值,因為它沒有分配給變量。如果你給它分配一個像下面這樣的變量就可以了:
e1 := EmployeeByID(id)
e1.Salary = 0

TA貢獻(xiàn)1864條經(jīng)驗 獲得超2個贊
這個簡化的例子演示了這個問題:
package main
type t struct {
int
}
func newT() *t { return &t{} }
//func newT() t { return t{} }
func main() {
newT().int = 0
}
我的猜測是,如果您使用newT不返回指針的版本,并且永遠(yuǎn)不會保存對 的結(jié)果的引用newT(),那么設(shè)置其int字段的值將永遠(yuǎn)無法做任何有意義的事情。這類似于設(shè)置一個未使用的變量。
如果你使用的是非指針版本newT但你有類似的東西:
x := newT()
x.int = 0
那你就好了。
或者,使用newT上面的指針版本也可以,因為它可能會返回您之前已經(jīng)定義的某些狀態(tài),請參見示例:
package main
type t struct {
int
}
var dilbert = &t{3}
func newT() *t { return dilbert }
//func newT() t { return t{} }
func main() {
println(dilbert.int)
newT().int = 0
println(dilbert.int)
}

TA貢獻(xiàn)1744條經(jīng)驗 獲得超4個贊
func EmployeeByID(id int) *Employee { /* ... */ }
這將返回一個指向 Employee 變量的指針。
func EmployeeByID(id int) Employee { /* ... */ }
這會返回一個值從一個Employee變量復(fù)制。在使用它之前,您需要將它分配給一個變量。
- 3 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報