Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya boleh mengubah suai Medan Struktur dalam Fungsi Go?

Bagaimanakah saya boleh mengubah suai Medan Struktur dalam Fungsi Go?

DDD
Lepaskan: 2024-12-17 05:51:25
asal
834 orang telah melayarinya

How Can I Modify Struct Fields within a Go Function?

Melalui Struct melalui Penunjuk untuk Mengubah Suai Medan

Dalam Go, struct diluluskan mengikut nilai, yang bermaksud bahawa sebarang perubahan yang dibuat pada struct dalam fungsi tidak ditunjukkan dalam struct asal. Ini boleh menjadi masalah apabila anda ingin mengubah suai medan struct dalam fungsi.

Pertimbangkan kod berikut:

type Point struct {
  x, dx int
}

func (s Point) Move() {
  s.x += s.dx
  log.Printf("New X=%d", s.x)
}

func (s Point) Print() {
  log.Printf("Final X=%d", s.x)
}

func main() {
  st := Point{ 3, 2 };
  st.Move()
  st.Print()
}
Salin selepas log masuk

Dalam kod ini, kaedah Move cuba mengubah suai x medan struct Point, tetapi kerana struct diluluskan oleh nilai, perubahan yang dibuat pada struct dalam kaedah Move tidak ditunjukkan dalam struct asal. Akibatnya, kaedah Cetak mengeluarkan nilai asal bagi x (3), bukan nilai yang dikemas kini (5).

Untuk menyelesaikan isu ini, kita perlu menghantar struct Point dengan penunjuk kepada kaedah Move. Dengan menghantar struct dengan penuding, kami menghantar rujukan kepada struct asal, jadi sebarang perubahan yang dibuat pada struct dalam kaedah Move akan ditunjukkan dalam struct asal.

Berikut ialah kod yang diperbetulkan:

type Point struct {
  x, dx int
}

func (s *Point) Move() {
  s.x += s.dx
  log.Printf("New X=%d", s.x)
}

func (s *Point) Print() {
  log.Printf("Final X=%d", s.x)
}

func main() {
  st := Point{ 3, 2 };
  st.Move()
  st.Print()
}
Salin selepas log masuk

Dengan perubahan ini, kaedah Move mengubah suai medan x struct Point dengan betul dan kaedah Cetak mengeluarkan nilai x yang dikemas kini. (5).

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengubah suai Medan Struktur dalam Fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan