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

Voici les pièges auxquels vous devez faire attention lorsque vous utilisez Go !

藏色散人
Libérer: 2021-12-15 15:30:26
avant
1556 Les gens l'ont consulté

Cet article est écrit par la rubrique golangtutorial pour vous présenter quelques pièges auxquels vous devez faire attention lors de l'utilisation de Go. J'espère qu'il sera utile aux amis dans le besoin !

Pièges de Go à noter

Pièges à noter

L'avantage de Go réside dans sa programmation coroutine pratique et ses solides performances en matière de traitement réseau. Cependant, afin de rechercher la simplicité d'utilisation, le langage Go est très différent des autres langages. Voici quelques principaux pièges auxquels il faut prêter attention :

1. Une classe peut accidentellement implémenter une interface (elle contient l'implémentation de celle-ci). interface). La sémantique de peut différer de ce qui est attendu par le contrat d’interface.

2. := et = sont faciles à confondre

3. Le problème de la valeur zéro de la classe. Si Map a une valeur nulle, elle peut être interrogée mais ne peut pas être attribuée 4. Le transfert de valeur des types de référence sera toujours modifié. la valeur originale. Quels sont les types de référence

5. Slice trap, si la capacité est suffisante, elle est passée par référence

6. valeur d'interface nulle

L'exemple de code de Pit 2~ Pit 6 est le suivant :

package main
import (
    "fmt"
    "time"
)
func catchError() {
    if err := recover(); err != nil {
        fmt.Println(err)
    }
}
func hole2() {
    a := 1
    if time.Now().Year() > 2020 {
        a := 2 // 一不小心加了一个冒号
        println(a)
    }
    println(a)
}
func hole3() {
    defer catchError()
    var m0 map[string]string
    println("key:", m0["key"])
    m0["key"] = "val" // 报错:assignment to entry in nil map
}
type Hole4 struct {
    Name    string
    Slices  []string
    MyMap   map[string]string
    Channel chan int
}
func hole4() {
    a := Hole4{
        Name:    "a",
        Slices:  []string{"a"},
        MyMap:   map[string]string{"key": "a"},
        Channel: make(chan int),
    }
    go func() {
        for n := range a.Channel {
            fmt.Println(n)
        }
    }()
    b := a
    b.Name = "b"
    b.Slices[0] = "b"
    b.MyMap["key"] = "b"
    b.Channel <- 999
    fmt.Println(a)
    fmt.Println(b)
}
func hole5() {
    slice1 := make([]string, 1, 1)
    slice1[0] = "1"
    temp1 := slice1
    temp1 = append(temp1, "1")
    temp1[0] = "2"
    fmt.Println(slice1)
    slice9 := make([]string, 1, 9)
    slice9[0] = "1"
    temp2 := slice9
    temp2 = append(temp2, "1")
    temp2[0] = "2"
    fmt.Println(slice9)
}
type Cache interface {
    Name()
}
type RedisCache struct{}
func (RedisCache) Name() {}
func hole6() {
    defer catchError()
    var redis1 *RedisCache = nil
    var redis2 Cache = redis1
    if redis2 != nil {
        println("entering...")
        redis2.Name() // 报错:nil pointer dereference
    }
}
func main() {
    hole2()
    hole3()
    hole4()
    hole5()
    hole6()
}
Copier après la connexion
.

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:
go
source:learnku.com
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!