美文网首页
Go中的struct比较知识点

Go中的struct比较知识点

作者: 风洛神 | 来源:发表于2020-07-08 17:35 被阅读0次

    说明

    image.png

    结论

    * 指针类型的结构体和数值类型的结构提不能比较

    * 同一个结构体的数值类型比较

    @ 如果结构体中包含:slice(切边,注意: 不是数组), map,function类型不能比较
    @ 除此之外可以比较
    

    * 同一个结构体的指针类型比较

    @可以比较,不用管结构体中是否包含不能比较的数据,因为比较的是指针地址
    

    *不同类型的结构体数值比较

    @可以先通过强制转换再比较. 强制转换的前提是两个不同结构体除了名字不一样,其他都一样,否则强制转换会报错, 同时也无法比较
    

    *不同类型的结构体指针比较

    @不能直接比较
    @可以先将一个结构体数值强制转换为另一个结构体数组,在取指针比较,是可以的
    
    • 例一
    type test struct{
      num int        //整形-类型数值
      name string  //字符串-字符类型
      data float32 //浮点型
      Arr   [2]bool //数组
      ptr   *int        //指针
    }
    //第一种:没有报错,说明可以比较,结果为true
    func main(){
        one:=test{}
        two:=test{}
        fmt.Println(one==two)
    }
    //第二种:赋值,没有报错,说明可以比较,结果为false
    func main(){
        one:=test{
            num: 123,
        }
        two:=test{
            num: 222,
        }
        fmt.Println(one==two)
    }
    //第三种:一个为指针,一个为值,报错,说明:值类型和指针类型不能比较
    func main(){
        one:=&test{
            num: 123,
        }
        two:=test{
            num: 222,
        }
        fmt.Println(one==two) //报错
    }
    //第四种:都是指针类型,没有报错,说明可以比较。比较的是指针只想的地址
    func main(){
        one:=&test{
            num: 123,
        }
        two:=&test{
            num: 222,
        }
        fmt.Println(one==two)
    }
    

    相关文章

      网友评论

          本文标题:Go中的struct比较知识点

          本文链接:https://www.haomeiwen.com/subject/yquscktx.html