最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 如何为导入的嵌入结构文字提供值?

    如何为导入的嵌入结构文字提供值?

    问题内容

    这里是菜鸟:)
    我无法理解

    当我在一个文件中执行此操作时:

    scratch.go

    package main
    
    import "fmt"
    
    type foo struct {
        field1 string
        field2 string
    }
    
    type bar struct {
        foo
        field3 string
        field4 string
    }
    
    func main() {
        foobar := bar{
            foo{
                "apples",
                "banana",
            },
            "spam",
            "eggs",
        }
        fmt.printf("%#vn", foobar)
    
    }
    

    它有效
    但是当我有 3 个这样的文件时

    rootproject
    ├── magazine
    │   ├── address.go
    │   └── employee.go
    └── main.go

    magazine/address.go

    package magazine
    
    type address struct {
        street     string
        city       string
        state      string
        postalcode string
    }
    

    magazine/employee.go

    package magazine
    
    type employee struct {
        name   string
        salary float64
        address
    }
    


    main.go

    package main
    
    import (
        "fmt"
        "magazine"
    )
    
    func main() {
        employee := magazine.employee{
            name:   "pogi",
            salary: 69420,
            magazine.address{
                street:     "23 pukinginamo st.",
                city:       "bactol city",
                state:      "betlog",
                postalcode: "23432",
            },
        }
    
        fmt.printf("%#vn", employee)
    
    }
    

    错误:(

    mixture of field:value and value elements in struct literal

    我不明白,我做错了什么?我认为如果该结构是嵌套的,则据说它嵌入在外部结构中,并且我可以从外部结构访问内部结构的字段。我的第一个示例(单个文件)就是这种情况,但是当我在包中执行此操作时。有什么不同吗?

    正确答案

    我认为如果该结构是嵌套的,则据说它嵌入在外部结构中,并且我可以从外部结构访问内部结构的字段。

    是的,您可以直接访问嵌入字段的成员,但这在使用 复合文字。如果您查看结构文字的规则,您会发现以下规则:

    如果任何元素有一个键,那么每个元素都必须有一个键。

    无论是否嵌入字段,此规则都适用。

    要修复该错误,您可以删除其他键:

    func main() {
        employee := magazine.employee{
            "pogi",
            69420,
            magazine.address{
                street:     "23 pukinginamo st.",
                city:       "bactol city",
                state:      "betlog",
                postalcode: "23432",
            },
        }
        fmt.printf("%#vn", employee)
    }
    

    或者您可以指定所有键:

    func main() {
        employee := magazine.Employee{
            Name:   "pogi",
            Salary: 69420,
            Address: magazine.Address{
                Street:     "23 pukinginamo st.",
                City:       "bactol city",
                State:      "betlog",
                PostalCode: "23432",
            },
        }
        fmt.Printf("%#vn", employee)
    }
    

    请注意,对于嵌入字段,您可以使用类型的非限定名称来引用嵌入字段。

    https://www.codesou.cn/link/2eeb0ca3f02a275d5179f3b6d9e86e7d

    使用类型声明但没有显式字段名称的字段称为嵌入字段。嵌入字段必须指定为类型名称 t 或指向非接口类型名称 *t 的指针,并且 t 本身可能不是指针类型。 非限定类型名称充当字段名称

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 如何为导入的嵌入结构文字提供值?
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情