英文:
Variable unused in Go
问题
以下是代码的翻译:
以下代码生成了编译错误:"err declared and not used"。如果这里存在作用域/遮蔽问题,那是因为我不理解的原则。有人可以解释一下吗?
package main
import (
"fmt"
)
func main() {
var (
err error
dto = make(map[string]interface{})
)
dto[`thing`], err = getThings()
fmt.Println(dto[`thing`])
}
func getThings() (string, error) {
return `the thing`, nil
}
请注意,这是代码的翻译结果,不包含任何其他内容。
英文:
The following code generates the compile error : "err declared and not used". If there is a scope/shadowing issue here, it's due to a principle I don't understand. Can someone explain?
package main
import (
"fmt"
)
func main() {
var (
err error
dto = make(map[string]interface{})
)
dto[`thing`],err = getThings();
fmt.Println(dto[`thing`]);
}
func getThings() (string,error) {
return `the thing`,nil
}
答案1
得分: 6
这是因为没有任何遮蔽。你没有使用err
变量除了给它赋值之外。
根据常见问题解答:
> 未使用的变量可能表示存在错误,而未使用的导入只会减慢编译速度。如果在代码树中累积了足够多的未使用导入,事情可能会变得非常缓慢。出于这些原因,Go 不允许这两种情况。
如果你声明了一个变量,就必须使用它。
在给定的程序中,err
被声明并被用于赋值。但是err
的值根本没有被使用。
你可以通过进行 _
赋值来绕过这种错误。
例如:
var _ = err
或者使用 err
进行判断:
if err != nil {
fmt.Println(err.Error())
return
}
以下代码可以解决这个问题,但我建议使用 err
来检查错误:
package main
import (
"fmt"
)
func main() {
var (
err error
dto = make(map[string]interface{})
)
_ = err
dto[`thing`], err = getThings()
fmt.Println(dto[`thing`])
}
func getThings() (string, error) {
return `the thing`, nil
}
**注意:**你必须使用在函数内声明的变量,但是如果你有未使用的全局变量是可以的。未使用的函数参数也是可以的。
英文:
This is not because of any shadowing. You have not used err
variable that is declared for anything but assigning a value to it .
according to FAQ
> The presence of an unused variable may indicate a bug, while unused
> imports just slow down compilation. Accumulate enough unused imports
> in your code tree and things can get very slow. For these reasons, Go
> allows neither
If you declare a variable it has to be used
In the given program err
is declared and is being used to assign data to .The value of err
is not used at all
You may bipass this kind of error by doing a _ assignment
ie,
var _ = err
or
using err
like
if err != nil {
fmt.Println(err.Error())
return
}
The following code would solve it,but i would suggest use the err for checking error
package main
import (
"fmt"
)
func main() {
var (
err error
dto = make(map[string]interface{})
)
_ = err
dto[`thing`], err = getThings()
fmt.Println(dto[`thing`])
}
func getThings() (string, error) {
return `the thing`, nil
}
PS : You must use variables you declare inside functions, but it's OK if you have unused global variables. It's also OK to have unused function arguments.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论