英文:
Golang if/else not compiling
问题
我无法弄清楚为什么这段代码无法编译。
它显示函数结束时没有返回语句,但是当我在else后面添加了一个return语句后,它仍然无法编译。
func (d Foo) primaryOptions() []string{
if(d.Line == 1){
return []string{"me", "my"}
}
else{
return []string{"mee", "myy"}
}
}
我无法提供代码翻译服务,但是你可以尝试检查以下几点:
- 确保函数的返回类型与函数声明中的返回类型匹配。
- 确保在每个可能的执行路径上都有返回语句。
- 检查是否有其他语法错误导致编译失败。
希望这些提示对你有帮助!
英文:
I cannot figure out why this will not compile.
It says functions ends without a return statement, but when I add a return after the else, it still won't compile.
func (d Foo) primaryOptions() []string{
if(d.Line == 1){
return []string{"me", "my"}
}
else{
return []string{"mee", "myy"}
}
}
答案1
得分: 9
Go语言要求else
与if
的大括号在同一行,这是因为它的“自动分号插入”规则。
所以代码应该是这样的:
if d.Line == 1 {
return []string{"me", "my"}
} else { // <---------------------- 这里必须放在上面
return []string{"mee", "myy"}
}
否则,编译器会自动为你插入一个分号:
if d.Line == 1 {
return []string{"me", "my"}
}; // <--------------------------- 如果你把它放在下面,编译器会自动插入分号
else {
return []string{"mee", "myy"}
}
这就是你遇到错误的原因。我会马上给你提供相关文档的链接。
编辑:Effective Go中有相关信息。
英文:
Go forces else
to be on the same line as the if
brace.. because of its "auto-semicolon-insertion" rules.
So it must be this:
if(d.Line == 1) {
return []string{"me", "my"}
} else { // <---------------------- this must be up here
return []string{"mee", "myy"}
}
Otherwise, the compiler inserts a semicolon for you:
if(d.Line == 1) {
return []string{"me", "my"}
}; // <---------------------------the compiler does this automatically if you put it below
else {
return []string{"mee", "myy"}
}
..hence your error. I will link to the relevant documentation shortly.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论