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

我有以下代码片段:


package main


import (

    "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()

我尝试了以下内容,但出现了相应的错误:

  1. var name string, err error = reader.ReadString('\n') -> syntax error: unexpected comma at end of statement

  2. var name, err string, error = reader.ReadString('\n') -> syntax error: unexpected comma at end of statement

  3. Go中的一行中有多个不同类型的变量(没有简短的变量声明语法)中获取提示,我也尝试过,这也给出了相同的错误。var (name string, err error) = reader.ReadString('\n')

对于上述链接问题,标记的答案只是建议对两种不同的变量类型使用两行。但是,对于像这样的函数的返回值,这将如何工作?ReadString()


一只甜甜圈
浏览 106回答 1
1回答

桃花长相依

首先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'))// ORname, err := stringAndError(reader.ReadString('\n'))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go