首頁 >後端開發 >Golang >如何為匯入的嵌入結構文字提供值?

如何為匯入的嵌入結構文字提供值?

WBOY
WBOY轉載
2024-02-05 21:54:111145瀏覽

如何為匯入的嵌入結構文字提供值?

問題內容

這裡是菜鳥:) 我無法理解

當我在一個文件中執行此操作時:

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("%#v\n", 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("%#v\n", 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("%#v\n", 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("%#v\n", employee)
}

請注意,對於嵌入字段,您可以使用類型的非限定名稱來引用嵌入字段。

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

使用類型宣告但沒有明確欄位名稱的欄位稱為嵌入欄位。嵌入欄位必須指定為類型名稱 t 或指向非介面類型名稱 *t 的指針,且 t 本身可能不是指標類型。 非限定類型名稱充當欄位名稱

以上是如何為匯入的嵌入結構文字提供值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除