gpt4 book ai didi

pointers - golang函数返回接口(interface)指针

转载 作者:IT王子 更新时间:2023-10-29 01:57:36 24 4
gpt4 key购买 nike

谁能帮我理解为什么它不能使用像 [Error 1] 和 [Error 2] 这样的语法?为什么 [ok 1] 是可能的并且工作得很好。

使用 Animal 作为字段作为泛型类型的基本设计好吗?或者有什么不好的地方吗?或者有什么更好的解决方案建议?

package main

import (
pp "github.com/davecgh/go-spew/spew"
)

type Cat struct {
Name string
Age int
}

type Animal interface{}

type House struct {
Name string
Pet *Animal
}

func config() *Animal {

c := Cat{"miao miao", 12}
// return &Animal(c) //fail to take address directly [Error 1]
// return &(Animal(c)) //fail to take address directly [Error 2]
a := Animal(c) //[Ok 1]
return &a
}

func main() {
pp.Dump(config())
pp.Dump(*config())
pp.Dump((*config()).(Cat)) //<-------- we want this
pp.Dump((*config()).(Cat).Name)
pp.Dump("---------------")
cfg := config()
pp.Dump(&cfg)
pp.Dump(*cfg)
pp.Dump((*cfg).(Cat)) //<-------- we want this
pp.Dump((*cfg).(Cat).Name)
pp.Dump("---------------")
}

最佳答案

好的,两件事:

  1. 您不能直接获取转换结果的地址,因为它不是“可寻址的”。查看section of the spec about the address-of operator了解更多信息。
  2. 为什么要使用指向接口(interface)的指针?在我所有的项目中,我只使用过一次接口(interface)指针。接口(interface)指针基本上是指向指针的指针,有时需要,但很少见。内部接口(interface)是类型/指针对。因此,除非您需要修改接口(interface)值而不是接口(interface)持有的值,否则您不需要指针。 This post您可能会感兴趣。

关于pointers - golang函数返回接口(interface)指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678088/

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