我有以下代码片段: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'))
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消