当前位置: 首页 > 面试题库 >

Go(golang)中的速记返回

邵伟泽
2023-03-14
问题内容

以下代码在Go 1.6或1.7中生成语法错误( 语句结尾 出现 意外的++ ):

package main

import "fmt"

var x int

func increment() int {
        return x++   // not allowed
}

func main() {
  fmt.Println( increment() )
}

这不应该被允许吗?


问题答案:

这是一个错误,因为Go中的++and
--是语句,而不是表达式:Spec:IncDec语句(并且语句没有要返回的结果)。

有关推理的信息,请参阅Go常见问题解答:为什么++和-语句而不是表达式?为什么使用后缀而不是前缀?

如果不使用指针算法,则前缀和后缀增量运算符的便利性值会下降。通过将它们从表达式层次结构中完全删除,可以简化表达式语法,并且可以消除围绕 和-(考虑f(i

)和p [i] = q [++ i])的求值的混乱问题。
。简化意义重大。至于后缀和前缀,两者都可以正常工作,但后缀版本更传统。带有STL的语言引起了对前缀的坚持,具有讽刺意味的是,该语言的名称包含后缀增量。

因此,您编写的代码只能写成:

func increment() int {
    x++
    return x
}

而且您必须在不传递任何内容的情况下调用它:

fmt.Println(increment())

请注意,我们仍然倾向于使用赋值将其写在一行中,例如:

func increment() int {
    return x += 1 // Compile-time error!
}

但这在Go中也不起作用,因为赋值也是一条语句,因此会出现html" target="_blank">编译时错误:

语法错误:语句结尾出现意外+ =



 类似资料:
  • 问题内容: 哪一个更好?使用如下速记: 或像这样长手: 相关: 性能(浏览器性能,文件大小) 文档(开发人员易于维护) 和别的 问题答案: 除非您已概要分析页面加载并且它已成为瓶颈,否则您不必担心CSS性能(我怀疑,它几乎总是多个HTTP请求和图像)。 任何有能力的开发人员都可以从上到下顺时针记住值的顺序。 速记意味着要发送的字节数更少,CSS缩小器并不会优化自身(我不认为)。 如果设置一个值,例

  • Go 编译器命令 go command [arguments] // go 命令 [参数] go build // 编译包和依赖包 go clean // 移除对象和缓存文件 go doc // 显示包的文档 go env // 打印go的环境变量信息 go bug // 报告bug go fix // 更新包使用新的api go fmt // 格式规范化代码 go generat

  • 问题内容: 我从golang开始,随着我开始建立自己的应用程序,我想从一开始就添加日志记录,这就是我遇到问题的地方。 如果我打开文件并使用标准日志记录库,则可以写入文件。像这样 我将获得带有日志行的test.log。但是,如果我尝试调整它以支持logrus https://github.com/Sirupsen/logrus这样 我只会看到错误。 写入日志失败,写入testlogrus.log:文

  • 问题内容: sql.Open()返回* sql.DB类型的变量 我有一个函数可以调用其他10个都需要进行数据库调用的函数 是否更正确/更有效: 发送* sql.DB指针到每个函数,或 在每个函数中创建一个新的* sql.DB对象 含义 要么 我问的原因是因为我当前正在向每个函数发送指针,而我的驱动程序似乎坏了。我正在使用http://code.google.com/p/odbc,这使我相信每个功能

  • 问题内容: 我创建了一个自定义错误类型来包装错误,以便更轻松地在Golang中进行调试。当有打印错误时它可以工作,但是现在引起了恐慌。 演示版 当我调用一个函数时,它不会返回错误,我仍然应该能够包装该错误。 预期的行为是,如果错误为nil,则应该简单地忽略它,不幸的是,它会做相反的事情。 我希望它能打印出来。而是即使错误为nil也会打印。 问题答案: 正在将err变量与nil进行比较,但实际上它是

  • 问题内容: 我目前使用Cython链接C和Python,并以慢速的python代码获得加速。但是,我想使用goroutines实现非常慢(且可并行化)的代码,但是必须可以从python调用它。 如果有必要,我很乐意通过C(或Cython)来建立数据结构等,但是从错误修复/避免的角度来看,避免这种额外的层将是一件好事。 无需重新发明轮子的最简单方法是什么? 问题答案: 更新2015 :从Go 1.5