dongpin4611 2017-06-29 21:32
浏览 281

如何通过Golang中的函数传递接口指针?

I was testing golang functionalities and came across this concept where I can use a pointer of an interface as an interface itself. In the below code, how do I ensure that the value of one changes to random.

package main

import (
    "fmt"
)

func some(check interface{}) {
    check = "random"
}

func main() {
    var one *interface{}
    some(one)
    fmt.Println(one)
}

Specifically, I need ways in which I can pass an interface pointer to a function which accepts an interface as an argument.

Thanks!

  • 写回答

1条回答 默认 最新

  • duanbairan4235 2017-06-29 21:33
    关注
    1. Accept a pointer to interface{} as the first parameter to some
    2. Pass the address of one to some
    package main
    
    import (
        "fmt"
    )
    
    func some(check *interface{}) {
        *check = "random"
    }
    
    func main() {
        var one interface{}
        some(&one)
        fmt.Println(one)
    }
    

    https://play.golang.org/p/ksz6d4p2f0

    If you want to keep the same signature of some, you will have to use the reflect package to set the interface{} pointer value:

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func some(check interface{}) {
        val := reflect.ValueOf(check)
        if val.Kind() != reflect.Ptr {
            panic("some: check must be a pointer")
        }
        val.Elem().Set(reflect.ValueOf("random"))
    }
    
    func main() {
        var one interface{}
        some(&one)
        fmt.Println(one)
    }
    

    https://play.golang.org/p/ocqkeLdFLu

    Note: val.Elem().Set() will panic if the value passed is not assignable to check's pointed-to type.

    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能