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



我收到一个指向函数接口的指针,并试图对其进行迭代。底层类型是字符串切片,如果我使用类型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) { ... }
}

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

这里有一个相关的问题供您参考:为什么可以';我是否将一个*结构分配给一个*接口?

最新更新