为了账号安全,请及时绑定邮箱和手机立即绑定

在同一行上声明多个变量,并在 Go 中键入

在同一行上声明多个变量,并在 Go 中键入

Go
一只甜甜圈 2022-10-04 19:41:46
我有以下代码片段:package mainimport (    "bufio"    "fmt"    "os")func main() {    var reader *bufio.Reader = bufio.NewReader(os.Stdin)    fmt.Println("Enter your name")    name, err := reader.ReadString('\n') //THIS LINE    if err == nil {        fmt.Println("Hello " + name)    }}我的问题是,如果我想不使用语法(就像我在第一行所做的那样),我该如何用类型重写调用?:=main()ReadString()我尝试了以下内容,但出现了相应的错误:var name string, err error = reader.ReadString('\n') -> syntax error: unexpected comma at end of statementvar name, err string, error = reader.ReadString('\n') -> syntax error: unexpected comma at end of statement从Go中的一行中有多个不同类型的变量(没有简短的变量声明语法)中获取提示,我也尝试过,这也给出了相同的错误。var (name string, err error) = reader.ReadString('\n')对于上述链接问题,标记的答案只是建议对两种不同的变量类型使用两行。但是,对于像这样的函数的返回值,这将如何工作?ReadString()
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

首先


name, err := reader.ReadString('\n')`

完全没问题。大多数IDE将显示返回值的类型,如果您不知道它们。ReadString()


正如链接的答案详细信息所示,变量声明最多可以有一个可选类型,因此无法指定 2 个类型。


如果这些类型不可见而困扰您,这意味着可读性对您来说更为重要。如果是这样,那就打破“一句话赢”的哲学。


如果希望类型在源代码中可见,请在前面声明类型,然后使用赋值:


var (

    name string

    err  error

)

name, err = reader.ReadString('\n')

如果你仍然需要一个衬里(只是为了好玩),它需要一个助手功能。帮助程序函数的名称可以“声明”预期的类型:


func stringAndError(s string, err error) (string, error) {

    return s, err

}

然后,您可以使用变量声明或短变量声明:


var name, err = stringAndError(reader.ReadString('\n'))

// OR

name, err := stringAndError(reader.ReadString('\n'))


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信