我使用以下方式,interface{}
虽然我只是eventsI interface{}
将其用作参数,但我仍然能够发送一个结构指针,如下所示。
func Wait(seconds float64) *WaitEvent {
return WaitEventCreate(seconds)
}
main.go
var introScene = []interface{}{
storyboard.Wait(5),
storyboard.Wait(2),
}
var storyboardI = storyboard.Create(stack, introScene)
stack.Push(&storyboardI)
现在在storyboard.go
文件里面创建函数
type Storyboard struct {
Stack *gui.StateStack
Events []interface{} //always keep as last args
}
func Create(stack *gui.StateStack, eventsI interface{}) Storyboard {
sb := Storyboard{
Stack: stack,
}
if eventsI != nil {
events := reflect.ValueOf(eventsI)
if events.Len() > 0 {
sb.Events = make([]interface{}, events.Len())
for i := 0; i < events.Len(); i++ {
sb.Events[i] = events.Index(i).Interface()
}
}
}
return sb
}
正如您在上面看到的 Storyboard.go 正在消耗,Events []interface{}
但实际上我发送的是一个 Struct 指针,它工作正常。
另一个例子在这里