回答
=
被賦值。更多關於分配在Go:Assignments
=
和:=
之間的微妙差別是當變量聲明使用=
。
在Go變量聲明的一般形式爲:
var name type = expression
上述聲明創建一個特定類型的變量,附加一個名稱給它,並設置它的初始值。 type
或= expression
可以省略,但不能同時爲兩者。
例如:
var x int = 1
var a int
var b, c, d = 3.14, "stackoverflow", true
:=
稱爲short variable declaration
這需要形式
name := expression
和名稱的類型是由表達式的類型確定
注意的是::=
是一個聲明,而=
是一個賦值
因此,一個短變量聲明必須聲明至少有一個新變量。這意味着一個短變量聲明不一定會在其左側聲明所有變量,當其中一些變量已經在同一個詞法塊中聲明時,那麼:=
就像對這些變量的賦值一樣起作用
例如:
r := foo() // ok, declare a new variable r
r, m := bar() // ok, declare a new variable m and assign r a new value
r, m := bar2() //compile error: no new variables
此外,:=
可能只出現在函數內部。在某些情況下,如「if」,「for」或「switch」語句的初始值設定項,它們可用於聲明本地臨時變量。
更多信息:
所以內部{}使用:=表示聲明新的變量,即使存在相同名稱的外部同名變量{}? –
是的,這是一個新的。一個{}是一個詞塊,不同的詞塊是不同的範圍。但在實踐中使用相同的名稱通常不是一個好的風格。 @whale_steward –
在函數內部,可以使用:=
簡短賦值語句來代替具有隱式類型的var聲明。
例如:
package main
import "fmt"
func main() {
var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
注意:與:=
聲明的變量只能在功能塊內使用。
:=
是聲明和初始化變量的「短聲明表單」。它會根據您分配的值來設置變量的類型。
如果您嘗試將短聲明表單分配給同一範圍內的相同變量,則編譯器將引發錯誤。
是在尋找對短期申報表「陰影」相同的變量在一個封閉的範圍內(特別是與錯誤)
=
聲明一個變量,該變量的類型明確以下變量名稱時需要var關鍵字。你實際上可以離開聲明,因爲Go對所有類型都有一個初始值(字符串初始化爲「」,整數是0,片是空片)。它也可以被用於具有隻是一個值重新分配,即
var s string = "a string" // declared and initialized to "a string"
s = "something else" // value is reassigned
var n int // declared and initialized to 0
n = 3
=
只是分配
:=
是聲明和初始化構建功能塊內新瓦爾(至少一個新的變種) (不全球):
var u1 uint32 //declare a variable and init with 0
u1 = 32 //assign its value
var u2 uint32 = 32 //declare a variable and assign its value at once
//declare a new variable with defining data type:
u3 := uint32(32) //inside the function block this is equal to: var u3 uint32 = 32
fmt.Println(u1, u2, u3) //32 32 32
//u3 := 20//err: no new variables on left side of :=
u3 = 20
fmt.Println(u1, u2, u3) //32 32 20
u3, str4 := 100, "str" // at least one new var
fmt.Println(u1, u2, u3, str4) //32 32 100 str
- 1. 「;」和「;」之間的區別是什麼?和T-SQL中的「GO」?
- 2. Go的tmp和html有什麼區別?
- 3. 「層」和「層」之間有什麼區別?
- 4. Tableau和QlikView之間有什麼區別
- 5. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 6. @Entity和@embeddable之間有什麼區別
- 7. ContentObservable和DataSetObservable之間有什麼區別?
- 8. touchmove和gesturechange之間有什麼區別?
- 9. :notification.flags和notification.defaults之間有什麼區別?
- 10. proc和lambda之間有什麼區別?
- 11. :: after和after之間有什麼區別?
- 12. read()和io.read()之間有什麼區別?
- 13. Request()和Request.Form()之間有什麼區別?
- 14. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之間有什麼區別?
- 15. getA()和this.getA()之間有什麼區別?
- 16. (int)和intval()之間有什麼區別?
- 17. set_value和= pandas之間有什麼區別
- 18. * zoom和zoom之間有什麼區別?
- 19. {0}和「」之間有什麼區別?
- 20. typedef和using之間有什麼區別?
- 21. 「」和「'之間有什麼區別?
- 22. STDIN和tty之間有什麼區別?
- 23. +和%之間有什麼區別?
- 24. sysfs_create_file()和sysfs_create_group()之間有什麼區別?
- 25. Lazy.Force()和Lazy.Value之間有什麼區別
- 26. -existingObjectWithID:error:和-objectWithID之間有什麼區別?
- 27. ReleaseFloatArrayElements和DeleteLocalRef之間有什麼區別
- 28. AutomationProperties.AutomationID和AutomationProperties.Name之間有什麼區別?
- 29. gets()和getc()之間有什麼區別?
- 30. _id:ObjectID和String之間有什麼區別?
https://tour.golang.org/basics/10 – Deadlock