gpt4 book ai didi

Go Golang - 嵌入类型和 "len/range"

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

package m
type M map[int]int
// have methods on M
// can use len and range on M

package n
// need methods of M
type N struct { M }
// methods available
// BUT cannot use len or range on N
// if " type N M " - I lose the methods on M

需要不同包中的 M 方法和 len/range 功能。如何做到这一点?

最佳答案

忽略包(在这种情况下它们无关紧要),您需要为内置 lenrange 指定有效类型:

type M map[int]int

func (m *M) SayHi() {
fmt.Println("Hi!")
}

type N struct{ M }

func main() {
var foo N
fmt.Println(len(foo.M))
for k, v := range foo.M {
fmt.Printf("%d: %d\n", k, v)
}
foo.SayHi()
}

foo.SayHi() 起作用是因为 SayHi 被提升为 struct N

但是,lenrange 不是M 上的方法,它们是需要特定类型的内置函数。嵌入不会改变类型,它将方法从嵌入字段提升到容器结构。

您可以在 Go spec 中阅读有关详细信息的更多信息和 Effective Go .

关于Go Golang - 嵌入类型和 "len/range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130731/

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