2016-07-03 14 views

Trả lời

8

Đây là xác nhận thời gian biên dịch rằng loại *Doubler thỏa mãn giao diện PropertyLoadSaver.

Nếu loại *Doubler không satisify giao diện, sau đó biên soạn sẽ thoát với một lỗi tương tự như:

prog.go:21: cannot use (*Doubler)(nil) (type *Doubler) as type PropertyLoadSaver in assignment: 
*Doubler does not implement PropertyLoadSaver (missing Save method) 

Sau đây là cách nó hoạt động. Mã số var _ PropertyLoadSaver khai báo biến không xác định loại PropertyLoadSaver. Biểu thức (*Doubler)(nil) đánh giá thành giá trị loại *Doubler. Chỉ có thể gán *Doubler cho biến loại ProperytLoadSaver nếu *Doubler triển khai giao diện PropertyLoadSaver.

Mã định danh trống _ được sử dụng vì biến không cần phải được tham chiếu ở nơi khác trong gói. Cùng một kết quả có thể đạt được với số nhận dạng không trống:

var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil) 
+0

Bạn có thể cung cấp thông số kỹ thuật không? https://golang.org/ref/spec –

+0

@Theuserwithnohat không có trong thông số kỹ thuật. Đó là một quy ước không chính thức. – Endophage

+1

@Karrot Kake bây giờ tôi hiểu nó hoạt động như thế nào. Đó là một loại lừa. Vì các số nhận dạng trống không được sử dụng theo bất kỳ cách nào tôi đoán nó không tạo ra rác, phải không? off-topic: '' (* Doubler) (nil) '' là tốt đẹp mặc dù. Tôi cũng không quen với điều này. –

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