gpt4 book ai didi

go - 如何获取实现特定接口(interface)的类型的新实例

转载 作者:行者123 更新时间:2023-12-01 20:08:36 24 4
gpt4 key购买 nike

我声明一个这样的接口(interface):

type TimeIndexedTable interface {
Get(string) ([]float64, error)
Set(string, []float64) error
GetIndex() []time.Time
SetIndex([]time.Time)
ListColumns() []string
}
然后我想实现一个名为 Resample 的函数
Resample(**UNDERLYING** TimeIndexedTable, interval time.Duration, functionMap map[string]string)(TimeIndexedTable ,error){
//give me a new instance of the UNDERLYING
}
所以,我想知道如何获得 底层 键入并初始化它的一个空实例。
如果这个问题令人困惑或以前曾被问过,我深表歉意,但我已经看过了。

最佳答案

使用reflect.New创建该类型的新值。

func Resample(src TimeIndexedTable, interval time.Duration, functionMap map[string]string)(TimeIndexedTable ,error){

t := reflect.TypeOf(src)
var v reflect.Value

if t.Kind() == reflect.Ptr {
// The interface is on the pointer receiver.
// Create a pointer to a new value.
v = reflect.New(t.Elem())
} else {
// The interface is on the value receiver.
// Create a new value.
v = reflect.New(t).Elem()
}

// Get the value as a TimeIndexedTable using a type assertion.
dst := v.Interface().(TimeIndexedTable)

...
Run it on the playground

关于go - 如何获取实现特定接口(interface)的类型的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62742034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com