Maison >développement back-end >Golang >Comment attribuer correctement une valeur à un pointeur Int dans Go ?

Comment attribuer correctement une valeur à un pointeur Int dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 17:50:14335parcourir

How to Correctly Assign a Value to an Int Pointer in Go?

Définition d'un pointeur Int sur une valeur Int dans Go

Dans Go, une tâche courante consiste à attribuer une valeur à un pointeur int. Cependant, une erreur récemment découverte dans un extrait de code met en lumière un piège potentiel :

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var guess *int
    fmt.Println(reflect.TypeOf(guess))
    *guess = 12345
    fmt.Println(guess)
}

Lors de l'exécution de ce code, l'erreur suivante se produit :

Type: *int
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x483c7d]

goroutine 1 [running]:
main.main()
    /home/aaron/projects/gopath/src/github.com/AaronNBrock/go-guess/main.go:16 +0x9d
exit status 2

La cause première réside dans le fait que la valeur du pointeur est initialement définie sur zéro. Le déréférencement d'un pointeur nul génère une erreur d'exécution, comme le montre le message d'erreur. La solution réside dans l'allocation de mémoire au pointeur avant de tenter de lui attribuer une valeur :

var guess *int
guess = new(int)
*guess = 12345

Cette modification garantit que deviner pointe vers un emplacement mémoire valide, nous permettant de définir et de récupérer sa valeur.

Alternativement, l'utilisation d'une courte déclaration de variable peut simplifier le code :

guess := new(int)
*guess = 12345

Une autre approche consiste à attribuer l'adresse d'une variable existante au pointeur :

value := 12345 // will be of type int
guess := &value

Cette solution pointe vers une variable existante, plutôt que d'allouer une nouvelle mémoire. Changer la valeur pointée modifie également la valeur de la variable d'origine.

Enfin, gardez à l'esprit que pointer un pointeur vers un emplacement et lui attribuer une valeur sont des opérations distinctes. Le premier alloue de la mémoire ou place le pointeur sur une variable existante, tandis que le second modifie la valeur stockée à l'emplacement pointé.

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!

Déclaration:
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