首页 >后端开发 >Golang >如何正确初始化Go中的嵌入式结构体?

如何正确初始化Go中的嵌入式结构体?

Patricia Arquette
Patricia Arquette原创
2024-12-24 10:21:24578浏览

How to Correctly Initialize Embedded Structs in Go?

Golang 嵌入式结构类型:了解语法和用法

在 Go 中使用嵌入式结构类型时,理解它们的语法和用法至关重要正确使用。本文解决了无法初始化嵌入结构的问题。

问题:

考虑以下类型:

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

尝试使用语法初始化 ErrorValue:

e := ErrorValue{Name: "alpha", Value: 123, Error: err}

结果错误。

解决方案:

嵌入类型,也称为未命名字段,通过其非限定类型名称来引用。在提供的代码中,初始化 ErrorValue 的语法不正确。

根据 Go 语言规范,应使用不带字段名称的类型名称来初始化嵌入字段。以下是正确的语法:

e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}

或者,您可以省略复合文字中的字段名称:

e := ErrorValue{NamedValue{"fine", 33}, err}

示例:

package main

import "fmt"

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

func main() {
    e := ErrorValue{NamedValue{Name: "alpha", Value: 123}, fmt.Errorf("some error")}
    fmt.Println(e)
}

输出:

{NamedValue:{Name:alpha Value:123} Error:some error}

通过理解了解嵌入式结构类型的语法和用法,您可以在 Go 程序中有效地利用它们。

以上是如何正确初始化Go中的嵌入式结构体?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn