• golang判断接口变的类型与指针切片使用法(重要)


    package main

    import (

    "fmt"
    "strconv"
    )


    func Demo() (s *[]string){
    s = new([]string) // s = &[]string{}
    return s
    }

    func main() {
    var s interface{}= "test"
    if _,ok:=interface{}(s).(string);ok{
    fmt.Println("ok")

    }
    switch v:=s.(type) {
    case string:
    fmt.Println(v)
    case int:
    strconv.Itoa(v)

    }
    fmt.Println(Demo())






    }

    判断container的类型

    
    


    打印其中的元素之前,正确判断变量的类型,使用“类型断言”表达式。
    value, ok := interface{}(container).([]string)

    var obj string

    tp := fmt.Sprintf("%T", obj)

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
    
    func main() {
        var v interface{}
    
        r := rand.New(rand.NewSource(time.Now().UnixNano()))
        for i := 0; i < 10; i++{
            v = i 
            if (r.Intn(100) % 2) == 0 { 
                v = "hello"
            }   
    
            if _, ok := v.(int); ok {
                fmt.Printf("%d\n", v)
            }   
        }   
    }

    ok是bool类型得,它代表判断的结果true或者false。如果是true,那么被判断的值将会被自动转换为[]string,并赋值给变量value,否则value将被赋值为nil。ok也可以没有,断言表达式的结果,可以只赋给一个变量value,但是这种情况,如果判断为否就会引发异常,panic(运行时抛出的异常),除非显式地恢复这种恐慌,否则它会使go程序崩溃并停止。所以,在一般情况下,应该使用带ok变量的写法。

    类型断言
    类型断言表达式的语法形式是x.(T),其中x代表要被判断类型的值,这个值当下必须是接口类型的,具体是哪个接口类型无所谓。上面的container变量类型不是任何的接口类型时,应该把它转成某个接口类型的值。如果container时某个接口类型了,那么断言表达式就可以式container.([]string)。
    go语言中,interface{}代表空接口,任何类型都是它的实现类型。任何类型的值都可以很方便地被转化成空接口的值。一对不包裹任何东西的花括号,除了可以代表空的代码块之外,还可以用于表示不包含任何内容的数据结构(或者说数据类型)。struct{},代表了不包含任何字段和方法的、空的结构体类型。而空接口interface{}则表达了不包含任何方法定义的、空的接口类型。一些集合类的数据类型来说,{}还可以用来表达其值不包含任何元素,比如空的切片值[]string{},以及空的字典值map[int]string{}。

    类型转换
    类型转换表达式的语法形式T(x)。其中x可以是一个变量,也可以是一个代表值的字面量(如1.2和struct{}),还可以是一个表达式。如果是表达式,那么该表达式的结果只能是一个值,而不能是多个值。在这个上下文中,x可以被叫做源值,它的类型就是源类型,而那个T代表的类型就是目标类型。
    interface{}(container)
    源值是container变量,目标类型是interface{}

  • 相关阅读:
    RTK-Mannual-1-User Requirements&Installation and Uninstallation&Real-Time Positioning with RTKNAVI
    第一章-1.四元素的定义和性质
    ubuntu下的公式编辑器-latex
    SL-IMU-5、6-惯性导航解算方法以及惯性导航误差分析
    卫星导航系统-第16讲-船用惯性导航系统与卫星导航系统的组合-2
    卫星导航系统-第16讲-船用惯性导航系统与卫星导航系统的组合-1
    卫星导航系统-第14讲-差分定位方法-2
    卫星导航系统-第14讲-差分定位方法-1
    卫星导航系统-第13讲-差分定位方法-2
    【无线安全实践入门】破解WiFi密码的多个方法
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16113508.html
Copyright © 2020-2023  润新知