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

Pointers 指向空接口类型断言的指针,pointers,go,interface,slice,type-assertion,Pointers,Go,Interface,Slice,Type Assertion,我收到一个指向函数接口的指针,并试图对其进行迭代。底层类型是一个字符串片,如果我使用类型接口{}而不是指向它的指针*接口{}键入断言接口指针的最佳方法是什么?使用指针,因为要转换的值很大 不起作用的代码: func convertMember(member *interface{}) { for _, members := range member.([]string) { 无效的类型断言:成员。([]字符串)(左侧为非接口类型*接口{}) 不适用于取消引用指针的代码: func c

我收到一个指向函数接口的指针,并试图对其进行迭代。底层类型是一个字符串片,如果我使用类型
接口{}
而不是指向它的指针
*接口{}
键入断言接口指针的最佳方法是什么?使用指针,因为要转换的值很大

不起作用的代码:

func convertMember(member *interface{})  {
    for _, members := range member.([]string) {
无效的类型断言:成员。([]字符串)(左侧为非接口类型*接口{})

不适用于取消引用指针的代码:

func convertMember(member *interface{})  {
    for _, members := range *member.([]string) {
无效的类型断言:成员。([]字符串)(左侧为非接口类型*接口{})

如果我将父函数更改为发送接口而不是其指针,则该代码有效:

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

或者我应该在string slice中键入assert并使用指向它的指针吗?

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

func convertMember(member *interface{})  {
    for _, members := range (*member).([]string) { ... }
}
但为什么需要指向接口的指针呢?当结构实现某个接口时,该结构的指针也实现该接口。所以一个指向接口的指针是永远不需要的


供您参考,这里有一个相关问题:

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

func convertMember(member *interface{})  {
    for _, members := range (*member).([]string) { ... }
}
但为什么需要指向接口的指针呢?当结构实现某个接口时,该结构的指针也实现该接口。所以一个指向接口的指针是永远不需要的


供您参考,这里有一个相关问题:

您使用
*
取消引用指针<代码>(*成员)。([]字符串)。但是,为什么要使用指向接口的指针呢?这里没有理由(或者永远没有理由)使用指向接口的指针。谢谢@JimB。我尝试了range
*成员。([]字符串)
,但显然不起作用,因为我没有给出花括号。我将在问题中指出这一点。您使用
*
解除对指针的引用<代码>(*成员)。([]字符串)。但是,为什么要使用指向接口的指针呢?这里没有理由(或者永远没有理由)使用指向接口的指针。谢谢@JimB。我尝试了range
*成员。([]字符串)
,但显然不起作用,因为我没有给出花括号。我会在问题中指出,谢谢。我尝试将其作为
range*成员取消引用。([]string)
,但由于我遗漏了方括号部分,因此没有;不行。我将把这一部分补充到问题中。成功了,谢谢。我尝试将其作为
range*成员取消引用。([]string)
,但由于我遗漏了方括号部分,因此没有;不行。我将把这一部分补充到问题中。成功了。