Rumah >pembangunan bahagian belakang >Golang >Bolehkah Anda Mencipta Struktur Tidak Berubah dalam Go?

Bolehkah Anda Mencipta Struktur Tidak Berubah dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 03:32:021087semak imbas

Can You Create Immutable Structs in Go?

Struktur Tak Berubah dalam Go

Soalan: Adakah layak untuk mencipta struktur tidak berubah dalam Go, memastikan bahawa sekali dimulakan, hanya operasi baca boleh dilakukan pada medannya tanpa mengubah suai nilainya? Jika ya, bagaimanakah ia boleh dicapai?

Jawapan:

Dalam Go, struct sememangnya boleh berubah. Walau bagaimanapun, adalah mungkin untuk membuat struct baca sahaja di luar pakejnya dengan menggunakan teknik tertentu. Begini cara ia boleh dilakukan:

Mentakrifkan Struktur Kekal:

Tentukan struct dengan medan bukan dieksport (medan bermula dengan huruf kecil). Ini menghalang akses terus ke medan dari luar pakej.

package mypackage

type myReadOnly struct {
  value int
}

Menyediakan Fungsi Pembaca:

Buat fungsi pembaca yang boleh mengakses medan peribadi struct. Fungsi ini akan mengembalikan salinan medan, memastikan nilai asal kekal tidak diubah suai.

func (s myReadOnly) Value() int {
  return s.value
}

Memulakan Struktur Tidak Boleh Ubah:

Buat fungsi yang memulakan struct dan mengembalikan contoh. Fungsi ini digunakan untuk mencipta kejadian baharu bagi struct tidak berubah.

func NewMyReadOnly(value int) myReadOnly{
  return myReadOnly{value: value}
}

Penggunaan:

Untuk menggunakan struct tidak berubah, import pakej dan cipta tika menggunakan fungsi permulaan. Akses medan menggunakan fungsi pembaca.

myReadOnly := mypackage.NewMyReadOnly(3)
fmt.Println(myReadOnly.Value()) // Prints 3

Dalam contoh ini, sebarang percubaan untuk mengubah suai medan nilai bagi contoh myReadOnly akan mengakibatkan ralat penyusunan kerana medan itu tidak dieksport. Fungsi pembaca Nilai menyediakan cara untuk mengakses medan tanpa mengubah suainya. Pendekatan ini berkesan mencipta struct tidak boleh ubah dalam Go.

Atas ialah kandungan terperinci Bolehkah Anda Mencipta Struktur Tidak Berubah 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