我有以下代碼片段: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 關注
- 123 瀏覽
添加回答
舉報
0/150
提交
取消