機能があります
func doStuff(inout *interface{}) {
...
}
この関数の目的は、任意のタイプのポインターを入力として扱うことができるようにすることです。しかし、構造体のポインターを使用して呼び出したい場合、エラーが発生します。
type MyStruct struct {
f1 int
}
doStuff
を呼び出すとき
ms := MyStruct{1}
doStuff(&ms)
私が持っています
test.go:38: cannot use &ms (type *MyStruct) as type **interface {} in argument to doStuff
&ms
をキャストして*interface{}
と互換性を持たせるにはどうすればよいですか?
「インターフェイスへのポインタ」などはありません(技術的には使用できますが、通常は必要ありません)。
「 golangのinterface {}の意味は何ですか? 」で見られるように、interface
は2ワードのデータを持つコンテナです。
そのため、ポインターを削除すると、doStuff
は正常に機能します。インターフェースのデータは&ms
、ポインタ:
func doStuff(inout interface{}) {
...
}
この例 を参照してください:
ms := MyStruct{1}
doStuff(&ms)
fmt.Printf("Hello, playground: %v\n", ms)
出力:
Hello, playground: {1}
MyStruct
がプロトコルに準拠している場合、*MyStruct
もプロトコルに準拠しています(型のメソッドセットがそのポインタ型のメソッドセットに含まれているため)。この場合、インターフェースは空のインターフェースなので、とにかくすべてのタイプを受け入れますが、それでも受け入れます。