我收到一个指向我的函数接口的指针,我正在尝试迭代它。底层类型是一个字符串切片,如果我使用类型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) {
或者我应该将它断言为字符串切片并使用指向它的指针?
答案 0 :(得分:2)
您需要在断言之前取消引用:
func convertMember(member *interface{}) {
for _, members := range (*member).([]string) { ... }
}
但为什么你想要一个指向接口的指针?当struct实现某个接口时,该struct的指针也会实现该接口。所以指向接口的指针是永远不需要的。
供您参考,以下是相关问题:Why can't I assign a *Struct to an *Interface?