zoukankan      html  css  js  c++  java
  • Go断言

    用Go语言提供的类型检测方法,同时也可作为断言的解决方案:

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    type MyStruct struct {
    }
    
    func (a *MyStruct) Action() {
        fmt.Println("Hello")
    }
    
    func main() {
        var M map[string]interface{}
        M = make(map[string]interface{}, 100)
        M["MyStruct"] = &MyStruct{}
        om := M["MyStruct"]            // the type of variable m is interface
        m := om.(*MyStruct)            // so asserts that value restored in m
        fmt.Println(reflect.TypeOf(m)) // *main.MyStruct
        m.Action()
    }

    m := om.(*MyStruct)

      • 如果om是MyStruct类型,则将转换后的类型赋值给m。
      • 如果MyStruct被定义为一个接口,只要实现了这个接口的对象,此操作都会成功。

    不过需要注意的是,如果false了,也就是不匹配,就会产生panic错误。

    还有一种不产生错误的方法。

      m, ok := om.(*MyStruct)

    使用两个变量接受返回值,如果ok为false,则m为零值,但是不会报错。

    因此你可以这样来进行错误处理:

    if !ok {
        fmt.Println("Type not matched!")
        os.Exit(1)
    }
    

      

  • 相关阅读:
    【算法】Manacher算法
    python 02 python入门知识
    python 01:计算机基础知识
    表示数值的字符串
    C++ 迭代器(STL迭代器)iterator详解
    构建乘积数组
    C++ 容器(STL容器)
    数组中重复的数字
    把字符串转换成整数
    十大经典排序算法
  • 原文地址:https://www.cnblogs.com/logo-fox/p/5979541.html
Copyright © 2011-2022 走看看