我想在 Go 中的單個語句中聲明兩個不同數(shù)據(jù)類型的變量(string和)。error我不想使用短聲明(:=)運(yùn)算符,因?yàn)槲蚁矚g在聲明時指定變量的類型。我正在關(guān)注Go docs 中的 Go 教程。我有一個greetings.Hello()從另一個模塊調(diào)用的函數(shù)。該greetings.Hello()函數(shù)如下所示:package greetingsimport ( "errors" "fmt")func Hello(name string) (string, error) { // If no name was given, return an error with a message if name == "" { return "", errors.New("empty name") } // If a name was received, return a value var message string = fmt.Sprintf("Welcome %v!", name) return message, nil}如您所見,此函數(shù)返回兩個值(astring和 an error)。所以最終,我必須將此函數(shù)的結(jié)果分配給調(diào)用者中的兩個變量。我greetings.Hello()從一個名為hello. 模塊主包的主函數(shù)hello如下所示:package mainimport ( "fmt" "log" "creating_modules/greetings")func main() { log.SetPrefix("greetings: ") log.SetFlags(0) var message string, err error = greetings.Hello("") if err !=nil { log.Fatal(err) } fmt.Println(message)}creating_modules/greetings是包含函數(shù)的問候模塊Hello()。大多數(shù)地鼠都是這樣處理的:message, error := greetings.Hello()但我想在一條語句中聲明變量及其數(shù)據(jù)類型。這兩個變量也應(yīng)該被賦予返回值greetings.Hello()。上面提到的hello模塊的main函數(shù)因?yàn)橘x值不正確,在運(yùn)行的時候會報錯,參考這一行:var message string, err error = greetings.Hello("")當(dāng)使用以下代碼運(yùn)行此代碼時,Go 編譯器會返回此錯誤go run:.\hello.go:14:20: syntax error: unexpected comma at end of statement可以通過復(fù)制粘貼上面的代碼來簡單地重現(xiàn)此問題(注意該greetings模塊是本地模塊,因此您需要使用 設(shè)置 go 工具的引用路徑go edit -replace)需要注意的另一件事是,我的問題與這個問題不同,因?yàn)樵搯栴}是關(guān)于在單個語句中聲明具有相同數(shù)據(jù)類型的變量,而我的問題是關(guān)于在單個語句中聲明具有不同數(shù)據(jù)類型的多個變量。PS 知道 Golang 沒有這個功能我不會感到驚訝
1 回答

森林海
TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個贊
在單個語句中聲明變量及其數(shù)據(jù)類型
不可能
變量聲明下語言規(guī)范中的支持子句
如果存在類型,則為每個變量賦予該類型。否則,每個變量都被賦予賦值中對應(yīng)的初始化值的類型。如果該值是無類型常量,則首先將其隱式轉(zhuǎn)換為其默認(rèn)類型;
所以像下面這樣的東西可以通過不指定任何一種類型來工作,但是你可以很好地使用短變量聲明來:=
代替
var message, error = greetings.Hello()
但是您可以使用它們的類型信息顯式聲明變量并使用=
賦值。
var message string
var err error
if message, err = greetings.Hello(""); err != nil {
log.Fatal(err)
}
- 1 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消