どこにも答えが見つからないので、これが状況です:
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar, err := doSomethingWithString()
if err != nil {
// error handling
}
}
その 2 番目globalVar
の宣言は、:=
'=' が使用されている場合と使用されている場合の両方でエラーになります。
- これ
:=
はglobalVar declared and not used
、globalVar が内部スコープの新しい変数であるためです。 - と
=
言うのはundefined err
、まだ申告していないからです。
したがって、基本的には、宣言の左側にある変数ごとに=
との違いを定義する方法が必要です。:=
私の意見では、どちらも同じように醜い2つの解決策があります。
// err has not yet been declared here
globalVar := "string"
if globalVar == "string" {
globalVar2, err := doSomethingWithString()
if err != nil {
// error handling
}
globalVar = globalVar2
}
また
globalVar := "string"
var err error
if globalVar == "string" {
globalVar, err = doSomethingWithString()
if err != nil {
// error handling
}
}
これらの回避策のいずれかを使用する必要がありますか、または必要なものを達成する正しい方法はありますか?
2 番目の解決策は最も見栄えが悪いように見えますが、if スコープでのみ必要な変数が多数ある場合、これらの変数はスコープの後で削除されず、外側のスコープ全体が保持されます。したがって、私の意見では、最初の解決策が最善のようです。
しかし、他の人がこの状況をどのように解決するかを聞きたいです...