sách gpt4 ai đã đi

Giao diện nào được thỏa mãn trong danh sách các giao diện tùy ý?

In lại Tác giả: IT Prince Thời gian cập nhật: 2023-10-29 01:34:03 29 4
mua khóa gpt4 Nike

Có cách nào để xác định loại cụ thể từ danh sách các giao diện tùy ý không? Tôi biết về chuyển đổi kiểu nhưng tôi muốn biết tất cả các giao diện được đáp ứng.

Ví dụ, cho:

loại Giao diện Mover { Move() }
loại giao diện Talker { Talk() }
loại giao diện Flyer { Fly() }

kiểu Person struct{}
func (a *Person) Move() { fmt.Println("Di chuyển...") }
func (a *Person) Talk() { fmt.Println("Đang nói...") }

Tôi có thể kiểm tra thủ công từng giao diện như sau:

func testInterfaces(giao diện thực thể{}) {

_, ok := thực thể.(Người di chuyển)
nếu được {
fmt.Println("người di chuyển")
}
_, ok := thực thể.(Người nói)
nếu được {
fmt.Println("người nói")
}
_, ok := thực thể.(Tờ rơi)
nếu được {
fmt.Println("tờ rơi")
}
}

Đối với giá trị Person, "người di chuyển" và "người nói" sẽ được in ra. Tuy nhiên, tôi muốn có chức năng như thế này (không hoạt động):

func testInterfaces2(giao diện thực thể{}, loại interfaceList??) {
đối với _, inter := phạm vi interfaceList {
val, ok := thực thể.(inter)
nếu được {
// làm gì đó với val
}
}
}

Có cách nào để tôi có thể triển khai một hàm giả như thế này không, có thể thông qua gói reflect hoặc thứ gì đó tương tự?

1 Câu trả lời

Bạn có thể sử dụng cái nàyNhận một phần của loại giao diện.

Sau đó bạn có thể kiểm tra giá trị của mìnhKiểu Có thực hiện được không?đây Giao diện trong . :

giao diện := []reflect.Type{reflect.TypeOf((*Mover)(nil)).Elem(), 
phản ánh.TypeOf((*Talker)(nil)).Elem(),
phản ánh.TypeOf((*Flyer)(nil)).Elem()}
p := &Người{}
t := phản ánh.TypeOf(p)
tên := t.Elem().Name()
đối với _, interf := phạm vi giao diện {
nếu t.Implements(interf) {
fmt.Printf("%s là %s\n", tên, interf.Name())
} khác {
fmt.Printf("%s KHÔNG phải là %s\n", name, interf.Name())
}
}

Nhưng tôi nghĩ tốt hơn là sử dụng công tắc loại nếu có thể

Về giao diện - Giao diện nào được thỏa mãn từ danh sách giao diện tùy ý? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/20570193/

29 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com