Maison > développement back-end > Golang > le corps du texte

Alphabétisation pour les débutants en Golang : des réponses claires aux problèmes courants

PHPz
Libérer: 2024-05-06 13:06:02
original
806 Les gens l'ont consulté

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

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

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) // 输出局部变量的值
}
Copier après la connexion

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) // 输出全局变量的值
}
Copier après la connexion

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

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

func changeRef(y *int) {
    *y = 10 // 修改指针指向的变量
}
Copier après la connexion

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

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

func changeRef(y *int) {
    *y = 10 // 修改指针指向的变量
    fmt.Println(*y) // 输出修改后的值
}
Copier après la connexion

难题 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()
}
Copier après la connexion

问题:如何确保 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 完成
}
Copier après la connexion

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

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

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

c := make([]int, len(a))
copy(c, a)  // 值传递,创建新的底层数组
Copier après la connexion

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

解决方案:使用内置函数 make()copy()

c := make([]int, len(a))
copy(c, a)
Copier après la connexion
🎜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 : 🎜rrreee

Ce 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal