golangのインターフェイスが空の配列を返すようにする方法
Go言語では nil を使って空配列を表すことができます。実装方法は次のとおりです。
package main
import (
"fmt"
)
type MyInterface interface {
GetData() []int
}
type MyStruct struct {
Data []int
}
func (s *MyStruct) GetData() []int {
return s.Data
}
type MyEmptyStruct struct{}
func (e *MyEmptyStruct) GetData() []int {
return nil
}
func main() {
var myInterface MyInterface
myStruct := &MyStruct{
Data: []int{1, 2, 3},
}
myEmptyStruct := &MyEmptyStruct{}
myInterface = myStruct
fmt.Println(myInterface.GetData()) // Output: [1 2 3]
myInterface = myEmptyStruct
fmt.Println(myInterface.GetData()) // Output: []
}
上のコードでは、GetDataメソッドというint型の配列を返すメソッドを含むMyInterfaceインターフェースが定義されています。その次に、GetDataメソッドを実装する構造体MyStructと空の構造体MyEmptyStructが定義されています。
GetDataメソッドで空配列が返ってきた場合は、nilをそのまま返せばよい。
main関数では、MyStruct 型のオブジェクト myStruct が作成され、myInterface 変数に代入され、myInterface.GetData() を通じて GetData メソッドが呼び出され、結果が出力されます。
同様に、MyEmptyStruct 型のオブジェクト myEmptyStruct を作成し、myInterface 変数に代入し、再び myInterface.GetData() で GetData メソッドを呼び出して結果を出力します。この場合、GetData で返すのは nil なので、空の配列が出力されます。