指向空接口类型断言的指针

Pointer to an empty interface type assertion

我收到一个指向我的函数接口的指针,我正在尝试迭代它。底层类型是一个字符串切片,如果我使用类型 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) {

或者我应该将它断言到字符串切片并使用指向它的指针吗?

您需要在断言之前取消引用:

func convertMember(member *interface{})  {
    for _, members := range (*member).([]string) { ... }
}

但是为什么要指向接口的指针?当结构实现某个接口时,该结构的指针也实现了该接口。所以指向接口的指针是一种永远不需要的。

这里有一个相关问题供您参考:Why can't I assign a *Struct to an *Interface?