web-dev-qa-db-fra.com

strconv.Atoi (), erreur de lancement lors de l'attribution d'une chaîne

Lorsque vous essayez d'utiliser strconv sur une variable transmise via URL (variable GET nommée fois), GoLang échoue lors de la compilation en indiquant ce qui suit:

strconv.Atoi () à valeurs multiples dans un contexte à valeur unique

Cependant, quand je réfléchis. TypeOf j'obtiens une chaîne comme type, ce qui, à ma connaissance, est le bon type d'argument.

J'essaie de résoudre ce problème depuis plusieurs heures. Je suis nouveau et je suis devenu assez frustré par ce problème. J'ai finalement décidé de demander de l'aide. Tout commentaire serait apprécié.

func numbers(w http.ResponseWriter, req *http.Request) {
  fmt.Println("GET params were:", req.URL.Query()); 
  times := req.URL.Query()["times"][0]
  time := strconv.Atoi(times)

  reflect.TypeOf(req.URL.Query()["times"][0]) // returns string
}
14
dead beef

L'erreur vous indique que les deux valeurs de retour de strconv.Atoi (int et error) sont utilisés dans un contexte de valeur unique (l'affectation à time). Changez le code en:

   time, err := strconv.Atoi(times)
   if err != nil {
      // handle error
   }
41
Cerise Limón

Bien qu'il ait été répondu et que la question soit assez ancienne, j'ai pensé qu'il serait bien de compléter la réponse acceptée.

Lorsqu'une fonction renvoie plusieurs valeurs comme dans la question, si l'une des valeurs n'est pas nécessaire, elles peuvent être supprimées en utilisant identifiant vide_ comme ci-dessous.

num, _ := strconv.Atoi(numAsString)

Cela stockerait le nombre converti dans num mais rejetterait l'erreur en l'attribuant à l'identifiant vide.

Mais notez qu'une fois qu'une valeur est affectée à _ il ne peut plus être référencé. c'est à dire.

num, _ := strconv.Atoi(numAsString)
fmt.Println(_) // won't compile. cannot reference _
1