Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memulakan Struktur Terbenam dengan betul dalam Go?

Bagaimana untuk Memulakan Struktur Terbenam dengan betul dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-24 10:21:24578semak imbas

How to Correctly Initialize Embedded Structs in Go?

Jenis Struktur Terbenam Golang: Memahami Sintaks dan Penggunaan

Apabila bekerja dengan jenis struct terbenam dalam Go, adalah penting untuk memahami sintaks dan penggunaan yang betul. Artikel ini menangani isu tidak dapat memulakan struct terbenam.

Masalah:

Pertimbangkan jenis berikut:

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

Percubaan untuk mulakan ErrorValue menggunakan sintaks:

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

hasil dalam ralat.

Penyelesaian:

Jenis terbenam, juga dikenali sebagai medan tidak dinamakan, dirujuk dengan nama jenis yang tidak layak. Dalam kod yang disediakan, sintaks untuk memulakan ErrorValue adalah tidak betul.

Mengikut spesifikasi bahasa Go, medan terbenam harus dimulakan menggunakan nama jenis tanpa nama medan. Berikut ialah sintaks yang betul:

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

Sebagai alternatif, anda boleh meninggalkan nama medan daripada literal komposit:

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

Contoh:

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

Output:

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

Dengan memahami sintaks dan penggunaan jenis struct terbenam, anda boleh memanfaatkannya dengan berkesan dalam program Go anda.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Struktur Terbenam dengan betul dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn