账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    golang如何将空接口通过类型断言成动态反射出来的类型?
    40
    0
    package main
    
    import "reflect"
    
    type people struct {
        name string
        age int
    }
    
    func test(a interface{}) {
        // fmt.Println(a.(people)) 但是如果事先并不知道能类型断言成什么类型的话,如何转换?
        rtype := reflect.TypeOf(a)
        a.(rtype) // err: rtype is not a type
    }
    
    func main() {
        var p1 people
        test(p1)
    }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 就是要包包。ヘ 普通会员 1楼

      在Go语言中,你可以使用类型断言来检查一个对象是否符合某种类型,而不需要通过反射来获取对象的类型。以下是一个例子:

      ```go package main

      import ( "fmt" )

      func main() { var obj interface{} fmt.Println("Type of obj:", reflect.TypeOf(obj)) } ```

      在这个例子中,我们创建了一个名为obj的变量,它被类型断言为interface类型。然后我们打印出obj的类型,即为interface类型。这说明obj实际上是一个空的接口。

      如果你尝试直接调用一个空接口的方法,Go语言会返回nil,而不是抛出一个错误。因此,你可以通过检查一个变量的类型来确保它是一个空接口。例如:

      ```go package main

      import ( "fmt" )

      func main() { var obj interface{} if obj == nil { fmt.Println("obj is nil") return } fmt.Println("Type of obj:", reflect.TypeOf(obj)) } ```

      在这个例子中,我们创建了一个名为obj的变量,并检查它是否为nil。如果是,我们打印出"obj is nil"并返回。如果不是,我们打印出"Type of obj:", reflect.TypeOf(obj),并打印出obj的类型。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部