gpt4 book ai didi

golang 使用嵌入式模板 : too few values in struct initializer 初始化结构

转载 作者:IT王子 更新时间:2023-10-29 01:04:34 26 4
gpt4 key购买 nike

我正在尝试使用嵌入式模板初始化 golang 结构。由于模板没有字段,我希望将正确数量的变量分配给构造函数会起作用,但编译器会提示

main.go:17:19: too few values in struct initializer

package main

import "fmt"

type TestTemplate interface {
Name() string
}

type TestBase struct {
name string

TestTemplate
}

func New(name string) *TestBase {
return &TestBase{name} // This fails
//return &TestBase{name: name} // This works
}

func (v *TestBase) Name() string {
return v.name
}

func main() {
fmt.Println(New("Hello"))
}

最佳答案

https://golang.org/ref/spec#Struct_types

一个嵌入字段仍然是一个字段,它的名字是从它的类型派生的,因此TestBase实际上有两个字段 而不是一个,即nameTestTemplate

这编译得很好:

var t *TestBase
t.TestTemplate.Print()

因此,在初始化 TestBase 时,您要么指定字段名称,要么初始化所有字段。

这些都可以编译:

_ = &TestBase{name, nil}
_ = &TestBase{name: name}
_ = &TestBase{name: name, TestTemplate: nil}
_ = &TestBase{TestTemplate: nil}

关于golang 使用嵌入式模板 : too few values in struct initializer 初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046203/

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