Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk memberikan nilai kepada struktur terbenam yang diimport secara literal?

Bagaimana untuk memberikan nilai kepada struktur terbenam yang diimport secara literal?

WBOY
WBOYke hadapan
2024-02-05 21:54:111125semak imbas

Bagaimana untuk memberikan nilai kepada struktur terbenam yang diimport secara literal?

Kandungan soalan

Saya newbie di sini :) Tak faham

Apabila saya melakukan ini dalam fail:

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)

}

Ia berkesan Tapi bila dah ada 3 file macam ni

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
}

dan 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)

}

Ralat :(

mixture of field:value and value elements in struct literal

Saya tidak faham, apa salah saya? Saya fikir jika struktur itu bersarang, ia dikatakan tertanam dalam struktur luar dan saya boleh mengakses medan struktur dalam dari struktur luar. Ini adalah kes dengan contoh pertama saya (fail tunggal), tetapi apabila saya melakukan ini dalam pakej. Adakah terdapat perbezaan?


Jawapan betul


Saya rasa jika struktur itu bersarang, ia dikatakan tertanam dalam struktur luar dan saya boleh mengakses medan struktur dalam dari struktur luar.

Ya, anda boleh mengakses ahli medan terbenam secara langsung, tetapi ini adalah apabila menggunakan huruf majmuk. Jika anda melihat peraturan untuk menstruktur teks, anda akan mendapati perkara berikut:

Jika mana-mana elemen mempunyai kunci, maka setiap elemen mesti mempunyai kunci.

Peraturan ini terpakai sama ada medan dibenamkan atau tidak.

Untuk membetulkan ralat anda boleh mengalih keluar kekunci lain:

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)
}

Atau anda boleh menentukan semua kunci:

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)
}

Perhatikan bahawa untuk medan terbenam, anda boleh merujuk medan terbenam menggunakan nama jenis yang tidak layak.

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

Medan yang diisytiharkan dengan jenis tetapi tanpa nama medan yang jelas dipanggil medan terbenam. Medan terbenam mesti dinyatakan sebagai nama jenis t 或指向非接口类型名称 *t 的指针,并且 t yang mungkin bukan jenis penunjuk. Nama jenis tidak layak bertindak sebagai nama medan.

Atas ialah kandungan terperinci Bagaimana untuk memberikan nilai kepada struktur terbenam yang diimport secara literal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam