tôi rất tò mò về thứ tự trong đó một số loại khác nhau của biểu thức, vì vậy tôi cố gắng mã này trong mức phải khai báo hàng đầu, suy nghĩ nó sẽ thất bại, nhưng phát hiện ra rằng nó hoạt động:Trình tự đánh giá các biểu thức
http://play.golang.org/p/CfP3DEC5LP
var x = func() *Foo {
fmt.Println(f) // prints &{foobar}
return f
}()
var f = &Foo{"foobar"}
type Foo struct {
bar string
}
Xin lưu ý:
tờ khai
type Foo struct
là ở dưới cùngtrước khi khai
type
có mộtvar f
khai và&Foo{]
phântrước khi khai
var
, có một chức năng đó là gọi ngay lập tức, mà tài liệu tham khảo và trả về biếnf
.
Trong khi nó không làm tôi ngạc nhiên quá nhiều đến nỗi tôi có thể làm cho một giá trị &Foo{}
mặc dù nó diễn ra trước khi khai báo type Foo struct
, nó đã làm tôi ngạc nhiên rằng tôi có thể tham khảo thành công và in giá trị f
trước khi phân công của nó .
Đây có phải là hành vi đáng tin cậy và được chỉ định không? Tôi không thể tìm thấy bất kỳ tham chiếu đến một thứ tự như vậy trong các đặc điểm kỹ thuật, nhưng có lẽ tôi bỏ qua nó.
Cảm ơn, tôi đã đọc, nhưng tôi tin rằng nó đang nói về gói phụ thuộc. Câu hỏi đặt ra là về thứ tự đánh giá mã trong cùng một gói. Trừ khi đó là ý nghĩa của * "... theo thứ tự tham chiếu ..." *? –
... vâng, tôi nghĩ vậy. Tôi tin rằng tôi đã nhầm lẫn về chủ đề trên paragaraph đó khi tôi đọc nó. –
Điều này thực sự làm rõ điều gì đó lớn hơn đối với tôi. Vì các gói có thể được chia thành nhiều tệp, tôi tự hỏi loại sắp xếp các tệp nào sẽ được sử dụng. Điều này dường như làm cho nó rõ ràng rằng thứ tự sẽ không liên quan, vì các biến được khởi tạo theo thứ tự sử dụng của chúng ... nếu điều đó có ý nghĩa. –