Rumah >pembangunan bahagian belakang >Golang >Selesaikan ralat golang: penggunaan medan 'x' yang tidak dieksport di luar struct

Selesaikan ralat golang: penggunaan medan 'x' yang tidak dieksport di luar struct

PHPz
PHPzasal
2023-08-26 08:03:291423semak imbas

解决golang报错:use of unexported field 'x' outside of struct

Menyelesaikan laporan ralat golang: penggunaan medan 'x' yang tidak dieksport di luar struct

Dalam proses menggunakan pembangunan golang, kami sering menghadapi pelbagai laporan ralat. Salah satu ralat biasa ialah "penggunaan medan 'x' yang tidak dieksport di luar struct".

Pertama sekali, kita perlu memahami peraturan eksport lapangan di golang. Dalam golang, medan dengan huruf besar dieksport dan boleh diakses dan digunakan oleh pakej luar; medan dengan huruf kecil tidak dieksport dan hanya boleh diakses dan digunakan dalam pakej semasa.

Mari kita lihat contoh mudah:

package main

import "fmt"

type person struct {
    name string
    age  int
}

func main() {
    p := person{"Alice", 20}
    fmt.Println(p.name) // 通过访问导出字段'name',没有问题
    fmt.Println(p.age) // 通过访问导出字段'age',也没有问题
    fmt.Println(p.x) // 报错:use of unexported field 'x' outside of struct
}

Dalam contoh di atas, kami mentakrifkan struktur orang, yang mengandungi tiga medan: nama, umur dan x. Kedua-dua nama dan umur adalah medan yang dieksport, jadi kami boleh mengaksesnya seperti biasa dalam fungsi utama. Tetapi x adalah medan yang tidak dieksport, jadi apabila kita cuba mengaksesnya, pengkompil akan mengadu.

Jadi bagaimana kita harus menyelesaikan masalah ini?

Terdapat dua penyelesaian: yang pertama ialah menukar medan kepada medan yang dieksport, dan yang kedua ialah mengakses nilai medan dengan menyediakan kaedah awam.

Kaedah 1: Tukar medan kepada medan yang dieksport

package main

import "fmt"

type person struct {
    name string
    age  int
    X    int // 将字段名改为首字母大写
}

func main() {
    p := person{"Alice", 20, 100}
    fmt.Println(p.name)
    fmt.Println(p.age)
    fmt.Println(p.X) // 现在通过访问导出字段'X',没有问题
}

Dalam contoh di atas, kami menukar medan x kepada X, supaya ia menjadi medan yang dieksport. Sekarang kita boleh mengaksesnya secara normal dalam fungsi utama.

Kaedah 2: Sediakan kaedah awam untuk mengakses nilai medan

package main

import "fmt"

type person struct {
    name string
    age  int
    x    int // 未导出字段,首字母小写
}

func (p person) GetX() int { // 提供一个公开的方法GetX来返回x字段的值
    return p.x
}

func main() {
    p := person{"Alice", 20, 100}
    fmt.Println(p.name)
    fmt.Println(p.age)
    fmt.Println(p.GetX()) // 通过调用GetX方法来访问x字段的值,没有问题
}

Dalam contoh di atas, kami menentukan kaedah GetX untuk mengembalikan nilai medan x. Dengan memanggil kaedah ini, kita boleh mengakses nilai medan x dalam fungsi utama tanpa terus mengakses medan yang tidak dieksport.

Untuk meringkaskan, apabila kami menghadapi "ralat golang: penggunaan medan 'x' yang tidak dieksport di luar struct", kami boleh memilih untuk menukar medan kepada medan yang dieksport atau menyediakan kaedah awam untuk mengakses nilai medan mengikut kami perlu menyelesaikan masalah ini. Dengan cara ini, medan struktur boleh diakses dan digunakan dengan betul dalam kod.

Atas ialah kandungan terperinci Selesaikan ralat golang: penggunaan medan 'x' yang tidak dieksport di luar struct. 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