Như những người khác đã giải thích, :=
là cho cả khai báo, chuyển nhượng, và cũng để khai báo; và nó đoán ( infers ) kiểu của biến tự động.
Ví dụ: foo := 32
là một dạng ngắn hạn của:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ * Có một số quy tắc: * /
★ Quy tắc 1:
Bạn không thể sử dụng :=
hết funcs
. Đó là bởi vì, trong bất kỳ func nào, một câu lệnh nên bắt đầu bằng một từ khóa.
// no keywords below, illegal.
illegal := 42
// `var` keyword makes this statement legal.
var legal = 42
func foo() {
alsoLegal := 42
// reason: it's in a func scope.
}
★ Quy tắc thứ 2:
Bạn không thể sử dụng chúng hai lần ( trong cùng phạm vi ):
legal := 42
legal := 42 // <-- error
Bởi vì, :=
giới thiệu "một biến mới" , do đó sử dụng nó hai lần không tái phân phối biến thứ hai, vì vậy nó là bất hợp pháp.
★ Quy tắc thứ 3:
Bạn có thể sử dụng chúng cho các khai báo và bài tập đa biến:
foo, bar := 42, 314
jazz, bazz := 22, 7
★ Quy tắc thứ 4 (Tuyên bố lại):
Bạn có thể sử dụng chúng hai lần trong khai báo "đa biến" , nếu một trong các biến là mới :
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
Điều này là hợp pháp, bởi vì, bạn không khai báo tất cả các biến, bạn chỉ cần gán lại các giá trị mới cho các biến hiện có và khai báo các biến mới cùng một lúc. Điều này được gọi là khai báo lại .
★ Quy tắc thứ 5:
Bạn có thể sử dụng khai báo ngắn để khai báo một biến trong phạm vi mới hơn ngay cả biến đó đã được khai báo có cùng tên trước đó:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Ở đây, foo := 42
là hợp pháp, bởi vì, nó tuyên bố foo
trong some()
phạm vi của func. foo = 314
là hợp pháp, bởi vì, nó chỉ gán một giá trị mới cho foo
.
★ Quy tắc thứ 6:
Bạn có thể khai báo cùng tên trong các khối lệnh ngắn như: if , for , switch :
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Bởi vì, foo
trong if foo := ...
, chỉ thuộc về if
điều khoản đó và nó thuộc một phạm vi khác.
Vì vậy, như một quy tắc chung: Nếu bạn muốn dễ dàng khai báo một biến bạn có thể sử dụng :=
hoặc, nếu bạn chỉ muốn ghi đè lên một biến hiện có, bạn có thể sử dụng =
.
Người giới thiệu: