gpt4 book ai didi

go - 使用动态结构创建 slice

转载 作者:行者123 更新时间:2023-12-01 22:35:18 25 4
gpt4 key购买 nike

我正在尝试创建接收空结构并返回该结构类型 slice 的函数。

例如 -

type MyStruct struct {
Id int
}
type MyOtherStruct struct {
Name string
}

getDynamicSlice(MyStruct{}) // will return []MyStruct{}
getDynamicSlice(MyOtherStruct{}) // will return []MyOtherStruct{}

在 Go 中实现此类功能的最佳方法是什么?

最佳答案

您可以使用类型开关:

func getStruct(i interface{}) interface{} {
switch s := i.(type) {
case MyStruct:
// do something here with type MyStruct
s.ID = 3
return s
case MyOtherStruct:
// ...
s.Name = "abc"
return s
}
return i

}

https://play.golang.org/p/iTlYP9yYuQw

但是你应该小心处理这个问题,因为 Go 严格使用类型。你应该尊重这一点。

当您调用该函数时,您应该使用类型断言来再次获得正确的类型:
s, ok := getStruct(MyStruct{}).(MyStruct)
if !ok {
// ...
}
fmt.Println(s)

有关该模式的更多信息

因为问题下的很多评论都是关于不使用 interface{}我想在这里写更多关于用例的内容。接口(interface)通常没有具体的类型信息。使用 interface{} 没关系或 io.Reader .这两个接口(interface)都不允许你访问接口(interface)下的值的参数。当您谈论空接口(interface)时,您应该始终考虑这一点。

所以如果你的函数返回一个接口(interface),你总是会遇到这种问题。我想几乎每个人都已经做了很多函数,它们都返回一个接口(interface)。因为 error也只是一个界面。所以整个错误处理可以使用这样的类型开关。

关于go - 使用动态结构创建 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398394/

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