2014-10-19 15 views
5

tôi nghĩ rằng tôi muốn có thể đưa ra một loại bản đồ ra lệnh bằng cách sử dụng các lĩnh vực mang tính chất:golang trường ẩn danh của loại bản đồ

type customMap struct{ 
    map[string]string 
    ordered []string 
} 

nơi tôi có thể tham khảo bản đồ với customMapInstance["key"] vấn và duyệt qua ordered. Than ôi, nó xuất hiện mảng và bản đồ không phải là trường vô danh hợp lệ. Tôi nghi ngờ có một lý do chính đáng ...

+0

Bạn có thể xem tại đây (http://stackoverflow.com/a/26194639/6309) một nỗ lực khác khi nhúng một loại chưa đặt tên. Nó cũng thất bại. – VonC

Trả lời

6

Từ spec:

Một kiểu nhúng phải được xác định như một tên kiểu T hoặc là một con trỏ đến một tên loại phi giao diện * T và T chính nó có thể không phải là một kiểu con trỏ.

Bạn thấy rằng nó đề cập đến "tên loại".

Loại được đặt tên được chỉ định bằng tên loại (có thể đủ điều kiện); các kiểu chưa đặt tên được xác định bằng cách sử dụng một kiểu chữ, trong đó soạn một kiểu mới từ các kiểu hiện có.

Nói cách khác, bản đồ hoặc lát có thể không ẩn danh trừ khi chúng được định nghĩa là loại được đặt tên. Ví dụ:

type MyMap map[string]string 

type customMap struct{ 
    MyMap 
    ordered []string 
} 

Tuy nhiên, ngay cả khi bạn nhúng myMap hoặc một loại lát, bạn sẽ vẫn không thể index customMap. Chỉ các trường và phương thức có thể được "quảng bá" khi bạn nhúng. Đối với mọi thứ khác, chúng hoạt động như một lĩnh vực khác. Trong ví dụ trên, MyMap không có bất kỳ trường hoặc phương thức nào và do đó tương đương với:

type customMap struct{ 
    MyMap MyMap 
    ordered []string 
} 
+0

Tôi thực sự đã thử đặt tên trước khi nhúng, nhưng than ôi. Tôi đã không nhìn vào việc thực hiện, nhưng lập chỉ mục một bản đồ âm thanh như gọi một hàm 'm.hashTableLookup (key interface {})', trong trường hợp đó nó có khả năng có thể được quảng bá, đúng không? Điều tương tự cho các kênh và gửi/nhận. Nó sẽ thực sự tuyệt vời nếu bạn có thể sử dụng cú pháp '[]' và '<-' đáng yêu trực tiếp trên các cấu trúc. – Ethan

+0

Điều này không giống như python hoặc các ngôn ngữ động khác mà cú pháp lập chỉ mục là cuộc gọi đến một phương thức ma thuật. Sử dụng [] hoặc <- trực tiếp trên cấu trúc là không thể. –

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