英文:
Why Go generics not support Struct as return value?
问题
Go版本是1.18-rc,这是我的代码:
type Dog struct {
Name string
CanBark bool
}
type Cat struct {
Name string
CanClimb bool
}
type Pet interface {
Dog | Cat
}
func GetDog[p Pet]() p {
return Dog{
Name: "Sam",
CanBark: true,
}
}
当我运行代码时,我得到了消息“无法将(Dog字面量)(类型为Dog的值)用作返回值中的p值”。
英文:
Go version is 1.18-rc, here is my code:
type Dog struct {
Name string
CanBark bool
}
type Cat struct {
Name string
CanClimb bool
}
type Pet interface {
Dog | Cat
}
func GetDog() p {
return Dog{
Name: "Sam",
CanBark: true,
}
}
when I run the code, I got the message "cannot use (Dog literal) (value of type Dog) as p value in return".
答案1
得分: 2
你不能直接返回为"Dog",它需要返回为"p"。
你应该检查类型,这样才能正常工作。
这是一个示例:
func GetDog[p Pet]() p {
a := new(p)
i := any(a)
switch i.(type) {
case *Dog:
v := Dog{"Sam", true}
return any(v).(p)
default:
v := Cat{"Caty", true}
return any(v).(p)
}
}
最后这是playground。
英文:
You can't directly return as "Dog", it want "p"
You should check the type so that will work.
This is the example
func GetDog[p Pet]() p {
a := new(p)
i := any(a)
switch i.(type) {
case *Dog:
v := Dog{"Sam", true}
return any(v).(p)
default:
v := Cat{"Caty", true}
return any(v).(p)
}
}
and finally this is the playground
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论