Non riesco a trovare la risposta da nessuna parte, quindi questa è la situazione:Vai: dichiara una nuova variabile e sovrascrive una variabile da un ambito superiore, come?
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar, err := doSomethingWithString()
if err != nil {
// error handling
}
}
Quella seconda dichiarazione globalVar
dà un errore sia poi :=
e quando '=' viene usato:
- Con
:=
si diceglobalVar declared and not used
perché ora globalVar è una nuova variabile nell'ambito interno. - con
=
diceundefined err
perché non è stato ancora dichiarato.
Quindi, fondamentalmente, ci dovrebbe essere un modo per definire la differenza tra =
e :=
per ciascuna variabile sul lato sinistro della dichiarazione.
vedo due possibili soluzioni, che sono entrambi ugualmente brutto a mio parere:
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar2, err := doSomethingWithString()
if err != nil {
// error handling
}
globalVar = globalVar2
}
o
globalVar := "string"
var err error
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
Devo usare uno di questi work-around o c'è una corretta modo di ottenere ciò di cui ho bisogno?
La seconda soluzione sembra la meno brutta, ma se ci sono molte variabili necessarie solo in ambito if, queste variabili non verranno rimosse dopo l'ambito e persistono per l'intero ambito esterno. Quindi la prima soluzione sembra la migliore secondo me.
Ma mi piacerebbe sentire come gli altri risolvono questa situazione ...
Nella tua seconda soluzione (che in realtà è corretta), devi sostituire 'err: = errors.New (" ")' con 'var err error'. Non c'è bisogno di creare un nuovo errore vuoto, lascia che sia zero. – ANisus
Grazie, lo rende già un po 'più pulito. Ma è il metodo più "corretto" per farlo? –
: = fa ciò che dice, che è dichiarare e assegnare a nuove variabili. Si desidera che funzioni come: = per parte dei valori di ritorno e = per l'altro, in base a quanto dichiarato in precedenza. Quindi, ciascuno: = sarebbe soggetto ad analisi: dichiara e assegna o assegna solo? Sarebbe incoerente, imho. – JimPaek