我收到一个指向函数接口的指针,并试图对其进行迭代。底层类型是字符串切片,如果我使用类型interface{}
而不是指向它的指针*interface{}
,我可以将其转换为它。键入断言指向接口的指针的最佳方式是什么?使用指针是因为要转换的值具有巨大的大小。
不起作用的代码:
func convertMember(member *interface{}) {
for _, members := range member.([]string) {
invalid type assertion: member.([]string) (non-interface type *interface {} on left)
无法使用取消引用指针的代码:
func convertMember(member *interface{}) {
for _, members := range *member.([]string) {
invalid type assertion: member.([]string) (non-interface type *interface {} on left)
如果我更改父函数以发送接口而不是其指针,则该代码有效:
func convertMember(member interface{}) {
for _, members := range member.([]string) {
或者我应该将assert类型输入到字符串切片并使用指向它的指针吗?
您需要在断言前取消引用:
func convertMember(member *interface{}) {
for _, members := range (*member).([]string) { ... }
}
但为什么要一个指向接口的指针呢?当一个结构实现某个接口时,该结构的指针也实现该接口。所以指向接口的指针是不需要的。
这里有一个相关的问题供您参考:为什么可以';我是否将一个*结构分配给一个*接口?