Literasi untuk Pemula Golang: Jawapan Jelas kepada Masalah Biasa

PHPz
Lepaskan: 2024-05-06 13:06:02
asal
790 orang telah melayarinya

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

为 Golang 初学者扫盲:常见难题的明晰解答

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) // 输出局部变量的值
}
Salin selepas log masuk

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) // 输出全局变量的值
}
Salin selepas log masuk

难题 2:值传递与引用传递

func changeValue(x int) {
    x = 10 // 只能修改 x 的局部副本
}

func changeRef(y *int) {
    *y = 10 // 修改指针指向的变量
}
Salin selepas log masuk

问题:如何修改函数参数的值,以便在函数外部访问修改后的值?

解决方案:要修改函数参数的值,使用引用传递,即使用指针:

func changeRef(y *int) {
    *y = 10 // 修改指针指向的变量
    fmt.Println(*y) // 输出修改后的值
}
Salin selepas log masuk

难题 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()
}
Salin selepas log masuk

问题:如何确保 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 完成
}
Salin selepas log masuk

难题 4:切片(slice)与数组

a := []int{1, 2, 3}
b := a  // 引用传递,指向 a 的底层数组

b = append(b, 4)  // 修改 b 将影响 a

c := make([]int, len(a))
copy(c, a)  // 值传递,创建新的底层数组
Salin selepas log masuk

问题:如何创建切片的副本,使其修改不会影响原始切片?

解决方案:使用内置函数 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!

Label berkaitan:
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!