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