自分のタイプの初期化メソッドを実装しようとしています。ただし、メソッドを呼び出した後、変数はmain()で変更されません。スライスがどのように機能するかを完全には理解していない可能性があります。これが私のサンプルコードです
package main
import "fmt"
type test [][]float64
func (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)...)
}
}
などですが、すべて失敗しました。
私が現在知っている唯一の実用的な解決策は、新しいスライスへのポインターを返す非バインドメソッドです。今のところこれで十分ですが、これをインターフェースの前提条件にしたいです。では、どうすればそれをバインドできますか?