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
.
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.
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.