2012-11-11 23 views
53

Điều gì đang xảy ra ở đây?không có biến mới nào ở bên trái của: =

package main 

import "fmt" 

func main() { 

    myArray :=[...]int{12,14,26} ;  
    fmt.Println(myArray) 

    myArray :=[...]int{11,12,14} //error pointing on this line 

    fmt.Println(myArray) ; 

} 

Nó ném một lỗi mà nói

no new variables on left side of := 

Những gì tôi đang làm đã được tái gán giá trị cho một biến đã khai báo.

Trả lời

73

Xóa colon : khỏi câu lệnh thứ hai khi bạn chỉ định một giá trị mới cho biến hiện tại.

myArray = [...]int{11,12,14} 

colon : được sử dụng khi bạn thực hiện việc kê khai ngắn và phân công cho lần đầu tiên như bạn đang làm trong tuyên bố đầu tiên của bạn ví dụ: myArray :=[...]int{12,14,26}.

21

Có hai loại toán tử gán trong go :==. Chúng tương đương ngữ nghĩa (đối với việc gán) nhưng đầu tiên cũng là "khai báo biến ngắn" (http://golang.org/ref/spec#Short_variable_declarations) có nghĩa là ở bên trái, chúng ta cần có ít nhất một khai báo biến mới cho nó là đúng.

Bạn có thể thay đổi thứ hai thành câu lệnh gán đơn giản := ->= hoặc bạn có thể sử dụng biến mới nếu điều đó phù hợp với thuật toán của bạn.

6
myArray :=[...]int{12,14,26} 

Như đã trình bày bởi các bình luận trước, := là một loại ngắn tay và/hoặc ngắn hình thức biến khai.

Vì vậy, trong phần trên, bạn đang thực hiện hai việc.

  1. Bạn đang tuyên bố biến của bạn là myArray.
  2. Bạn đang gán một mảng số nguyên cho biến số myArray.

Phần thứ hai của mã của bạn thất bại, bởi vì những gì bạn đang làm gì ở đây:

myArray :=[...]int{11,12,14} //error pointing on this line 

là RE-tuyên bố hiện myArray biến, trong đó đã có chứa giá trị số nguyên.

này hoạt động:

myArray = [...]int{11,12,14} //error pointing on this line 

Bởi vì, nó là gán mảng số nguyên vào biến hiện (pre-tuyên bố/khởi động).

Các vấn đề liên quan