web-dev-qa-db-fra.com

Pourquoi une chaîne ne peut-elle pas être nulle dans Go?

Le programme disponible sur The Go Playground lit

package main

import "fmt"

func main() {
    var name string = nil
    fmt.Println(name)
}

et donne une erreur

prog.go:6: cannot use nil as type string in assignment

Je comprends "" est la "valeur zéro" pour les chaînes . Je ne comprends pas pourquoi je ne peux pas affecter nil à ma string.

17
user319286

Dans go string est un type de données, ce n'est pas un pointeur sur un tableau comme C/C++. En tant que tel, vous ne pouvez pas l'affecter à zéro. 

2
GarMan

Aedolon a fait quelques bons points, mais pour aller plus loin, dans d'autres langues, les chaînes sont un moyen pratique de représenter des tableaux d'octets sous forme de caractères. Nous devons faire cela souvent, donc ce cas d'utilisation spécifique d'un tableau reçoit beaucoup de support linguistique pour le rendre plus facile à utiliser. Cependant, au coeur du problème, vous travaillez avec un tableau, qui peut souvent être nul dans un langage car il s'agit d'un type de référence. Autrement dit, la chaîne n'est pas vraiment nulle, le pointeur sur le tableau est nul. Comme de nombreuses langues associent ces deux aspects, les programmeurs sont habitués à devoir vérifier si une chaîne est nulle avant de l'utiliser.

Go ne fait pas ça. Une chaîne ne peut pas être nulle, car la structure de données entre go ne le permet pas. Vous pouvez avoir un pointeur sur un tableau d'octets contenant des représentations de caractères dans go be null, mais ce n'est pas une chaîne.

0
Roger Hill