我嘗試為我自己的類型實現初始化方法。但是,調用該方法后,變量在main()中保持不變。我可能還沒有完全了解切片的工作原理,這是我的示例代碼package mainimport "fmt"type test [][]float64func (p *test) init(m, n int){ tmp := *p tmp = make(test, m) for i := 0; i < m; i++ { tmp[i] = make([]float64, n) }}func main(){ var t test t.init(10,2) fmt.Println(t)}我的印象是可以更改接收器類型*的內容,但對于片來說似乎并非如此。那么,如何正確地將初始化函數綁定到我的類型上呢?我很確定我的身邊存在誤會....我嘗試了幾件事,例如var t *test = new(test)或者func (p *test) init(m, n int){ tmp := *p tmp = append(tmp, make(test, m)...) for i := 0; i < m; i++ { tmp[i] = append(tmp[i], make([]float64, n)...) }}等等,但是都失敗了。我目前知道的唯一可行的解決方案是一個未綁定的方法,該方法將指針返回到新的切片。現在就可以了,但是我想使它成為接口的先決條件。那么我該如何綁定呢?
1 回答

溫溫醬
TA貢獻1752條經驗 獲得超4個贊
func (p *test) init(m, n int){
tmp = make(test, m)
for i := 0; i < m; i++ {
tmp[i] = make([]float64, n)
}
*p = tmp
}
你近了。以上就是你想要的。但是沒有理由避免使用返回新切片的函數。這很慣用,感覺很像用其他語言編寫構造函數:
func newTest(m, n int) test {
t = make(test, m)
for i := range t {
t[i] = make([]float64, n)
}
return t
}
- 1 回答
- 0 關注
- 283 瀏覽
添加回答
舉報
0/150
提交
取消