2 回答

TA貢獻1796條經驗 獲得超4個贊
:=
不是賦值,它是一個簡短的變量聲明。賦值使用例如簡單=
運算符。
顧名思義:就是聲明變量。suite.db
不是一個變量,它是一個表達式,更具體地說是一個主表達式;準確地說是一個選擇器。
短變量聲明使用語法:
ShortVarDecl?=?IdentifierList?":="?ExpressionList?.
在哪里IdentifierList
:
IdentifierList?=?identifier?{?","?identifier?}?.
所以你必須列出標識符。此“聲明新變量規則”的一個“例外”是重新聲明:
與常規變量聲明不同,短變量聲明可以重新聲明變量,前提是它們最初是在同一塊(如果塊是函數體,則為參數列表)中較早聲明的,具有相同的類型,并且至少有一個非空白變量是新的。因此,重新聲明只能出現在多變量簡短聲明中。重新聲明不會引入新變量;它只是為原始值分配了一個新值。
因此,如果它們是在同一塊中聲明的,則允許在簡短的變量聲明中使用現有變量,并且您還提供新的標識符(不僅僅是現有的標識符——在這種情況下,您將不得不使用賦值)。
err
當您先聲明并:=
對其=
進行更改時,因為賦值不需要賦值運算符左側的標識符,而是表達式:
Assignment?=?ExpressionList?assign_op?ExpressionList?.
并且如上所述,suite.db
是一個表達式,就像現有變量(標識符)一樣。

TA貢獻1818條經驗 獲得超8個贊
:=聲明一個新變量“標識符”。這意味著您在程序中添加了一個可以賦值的命名事物。結構的字段已經命名,因為在 golang 解析器中知道它們存在,所以:=在這種情況下使用對 golang 沒有意義。
為什么在 a := 賦值中聲明 k < n 變量會失?。?!
我不確定“k < n”是什么意思,但我認為你的意思是“為什么在:=失敗的左側有多個變量?”。如果那是你的意思,那不是真的。
x, y, z := func() (int,int,int) {return 1,2,3}()
fmt.Println(x, y, z)
工作得很好。問題是 golang 無法為結構字段創建“標識符”(又名新命名的變量),因為該結構字段已經存在。
編輯:我剛剛靈機一動,你的意思可能是“為什么只有一些新的標識符在左側聲明:=不起作用?”。這也不是真的。
x, y := 5, 6
fmt.Println(x, y)
x, y, z := 1, 2, 3
fmt.Println(x, y, z)
以上工作也很好。
- 2 回答
- 0 關注
- 150 瀏覽
添加回答
舉報