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

时间:2016-04-11 14:05:58

标签: pointers go interface slice 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) {

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

1 个答案:

答案 0 :(得分:2)

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

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

但为什么你想要一个指向接口的指针?当struct实现某个接口时,该struct的指针也会实现该接口。所以指向接口的指针是永远不需要的。

供您参考,以下是相关问题:Why can't I assign a *Struct to an *Interface?