Maison > Article > développement back-end > Alphabétisation pour les débutants en Golang : des réponses claires aux problèmes courants
Résoudre un problème courant pour les débutants de Golang : accéder aux variables globales : utilisez la syntaxe global_variable, telle que global_variable_x. Modifier les valeurs des paramètres de fonction : utilisez le transfert de référence (pointeur), tel que *y = 10. Attendez la fin de la goroutine : utilisez sync.WaitGroup, tel que wg.Wait(). Pour créer une copie d'une tranche : utilisez make() et copy(), comme c := make([]int, len(a));
Guide du débutant Golang : réponses simples aux énigmes courantes
Introduction
Golang, un langage de programmation puissant privilégié par les débutants pour sa simplicité, sa concurrence et ses fonctionnalités de garbage collection. Cependant, les novices rencontreront inévitablement des problèmes courants lors de l’écriture du code Golang. Pour les aider à surmonter ces difficultés, cet article explore certains défis courants et leurs solutions claires.
Puzzle 1 : Déclaration et portée des variables
var x int = 5 // 全局变量 func main() { x := 10 // 局部变量 fmt.Println(x) // 输出局部变量的值 }
Question : Les variables locales et les variables globales ont le même nom, comment accéder aux variables globales ?
Solution : Lors de l'utilisation de variables globales, vous devez utiliser global_variable
Syntaxe : 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()
c := make([]int, len(a)) copy(c, a)🎜Problème 2 : Passage par valeur et passage par référence🎜🎜rrreee🎜🎜Question : 🎜Comment modifier la valeur des paramètres de la fonction, afin que la valeur modifiée soit accessible en dehors de la fonction ? 🎜🎜🎜Solution : 🎜Pour modifier la valeur du paramètre de la fonction, utilisez le passage par référence, c'est-à-dire utilisez un pointeur : 🎜rrreee🎜🎜Puzzle 3 : goroutine et concurrence 🎜🎜rrreee🎜🎜Question : 🎜Comment s'assurer que goroutine quitte la fonction main() Exécution terminée ? 🎜🎜🎜Solution : 🎜Utilisez
sync.WaitGroup
pour attendre la fin de la goroutine : 🎜rrreee🎜🎜Problème 4 : Tranches et tableaux 🎜🎜rrreee🎜🎜Question : 🎜Comment créer une copie d'une tranche, pour que les modifications n'affectent pas la tranche d'origine ? 🎜🎜🎜Solution : 🎜Utilisez les fonctions intégrées make()
et copy()
pour créer une copie de la tranche, obtenant ainsi un tableau sous-jacent indépendant : 🎜rrreeeCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!