Menyelesaikan masalah biasa untuk pemula Golang: mengakses pembolehubah global: Gunakan sintaks pembolehubah_global, seperti global_variable_x. Ubah suai nilai parameter fungsi: Gunakan pemindahan rujukan (penunjuk), seperti *y = 10. Tunggu goroutine selesai: gunakan sync.WaitGroup, seperti wg.Wait(). Untuk membuat salinan kepingan: gunakan make() dan copy(), seperti c := make([]int, len(a));
Panduan Permulaan Golang: Jawapan Ringkas untuk Teka-teki Biasa
Pengenalan
Golang, bahasa pengaturcaraan yang berkuasa digemari oleh pemula kerana kesederhanaan dan ciri koleksi garbage Walau bagaimanapun, orang baru pasti akan menghadapi beberapa masalah biasa semasa menulis kod Golang. Untuk membantu mereka mengatasi kesukaran ini, artikel ini meneroka beberapa cabaran biasa dan penyelesaiannya yang jelas.
Teka-teki 1: Pengisytiharan dan skop pembolehubah
var x int = 5 // 全局变量 func main() { x := 10 // 局部变量 fmt.Println(x) // 输出局部变量的值 }
Soalan: Pembolehubah tempatan dan pembolehubah global mempunyai nama yang sama, bagaimana untuk mengakses pembolehubah global? . nilai parameter fungsi, supaya nilai yang diubah suai boleh diakses di luar fungsi? . keluar dari fungsi main() Selesai pelaksanaan? . supaya pengubahsuaian tidak akan menjejaskan kepingan asal?
Penyelesaian: Gunakan fungsi terbina dalam make()
dan copy()
untuk mencipta salinan hirisan, dengan itu mendapatkan tatasusunan asas bebas: global_variable
语法:
func main() { x := 10 // 局部变量 fmt.Println(x) // 输出局部变量的值 fmt.Println(global_variable_x) // 输出全局变量的值 }
难题 2:值传递与引用传递
func changeValue(x int) { x = 10 // 只能修改 x 的局部副本 } func changeRef(y *int) { *y = 10 // 修改指针指向的变量 }
问题:如何修改函数参数的值,以便在函数外部访问修改后的值?
解决方案:要修改函数参数的值,使用引用传递,即使用指针:
func changeRef(y *int) { *y = 10 // 修改指针指向的变量 fmt.Println(*y) // 输出修改后的值 }
难题 3:goroutine 和并发
func main() { wg := new(sync.WaitGroup) wg.Add(2) go func() { fmt.Println("goroutine 1") wg.Done() }() go func() { fmt.Println("goroutine 2") wg.Done() }() wg.Wait() }
问题:如何确保 goroutine 在退出 main() 函数之前完成执行?
解决方案:使用 sync.WaitGroup
来等待 goroutine 完成:
func main() { wg := new(sync.WaitGroup) wg.Add(2) go func() { fmt.Println("goroutine 1") wg.Done() }() go func() { fmt.Println("goroutine 2") wg.Done() }() wg.Wait() // 等待所有 goroutine 完成 }
难题 4:切片(slice)与数组
a := []int{1, 2, 3} b := a // 引用传递,指向 a 的底层数组 b = append(b, 4) // 修改 b 将影响 a c := make([]int, len(a)) copy(c, a) // 值传递,创建新的底层数组
问题:如何创建切片的副本,使其修改不会影响原始切片?
解决方案:使用内置函数 make()
和 copy()
rreee
Atas ialah kandungan terperinci Literasi untuk Pemula Golang: Jawapan Jelas kepada Masalah Biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!