zoukankan      html  css  js  c++  java
  • go 中比较类型

    go 中不可比较类型
    slice、map、func
    可否比较 是通过reflect.TypeOf(v1).Comparable() 进行判断
    但是 如果真的想进行比较 可以通过 reflect.DeepEqual(v1, v2) 
    通过深度进行判断
    // 举几个例子
    // 方法 进行比较
    package main

    import (
    "fmt"
    "reflect"
    )

    func Equal(v1, v2 interface{}) {

    comparable := reflect.TypeOf(v1).Comparable()
    fmt.Println("comparable: ", comparable)

    equal := reflect.DeepEqual(v1, v2)
    fmt.Println("equal: ", equal)

    return
    }

    func main() {
    v1 := interface{}(func() {})
    v2 := interface{}(func() {})
    Equal(v1, v2)
    //fmt.Println("equal: ", equal)
    }

    comparable: false
    equal: false

    // map 
    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func Equal(v1, v2 interface{}) {
    
        comparable := reflect.TypeOf(v1).Comparable()
        fmt.Println("comparable: ", comparable)
    
        equal := reflect.DeepEqual(v1, v2)
        fmt.Println("equal: ", equal)
    
        return
    }
    
    func main() {
        v1 := interface{}(map[int]int{})
        v2 := interface{}(map[int]int{})
        Equal(v1, v2)
        //fmt.Println("equal: ", equal)
    }
    
    
    comparable:  false
    equal:  true
    // slice
    
    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func Equal(v1, v2 interface{}) {
    
        comparable := reflect.TypeOf(v1).Comparable()
        fmt.Println("comparable: ", comparable)
    
        equal := reflect.DeepEqual(v1, v2)
        fmt.Println("equal: ", equal)
    
        return
    }
    
    func main() {
        v1 := interface{}([]int{})
        v2 := interface{}([]int{})
        Equal(v1, v2)
        //fmt.Println("equal: ", equal)
    }
    
    comparable:  false
    equal:  true
    // slice 传递 具体的 值
    
    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func Equal(v1, v2 interface{}) {
    
        comparable := reflect.TypeOf(v1).Comparable()
        fmt.Println("comparable: ", comparable)
    
        equal := reflect.DeepEqual(v1, v2)
        fmt.Println("equal: ", equal)
    
        return
    }
    
    func main() {
        v1 := interface{}([]int{1})
        v2 := interface{}([]int{1,2})
        Equal(v1, v2)
        //fmt.Println("equal: ", equal)
    }
    
    
    comparable:  false
    equal:  false
    邮箱: 1090055252@qq.com
  • 相关阅读:
    mongodb 初学 意外 连接服务器异常(Connection refused)
    mongodb 关闭服务器
    Redis 入门指令
    mongodb 在 Ubuntu系统上的安装及卸载
    Java 使用 Redis
    随笔 -- IO -- Socket/ServerSocket -- 系统概述
    java enum(枚举)使用详解 + 总结
    Java -- IO -- 目录
    Java 流(Stream)、文件(File)和IO -- Java ByteArrayInputStream类
    INSERT INTO .. ON DUPLICATE KEY UPDATE ...
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/15577304.html
Copyright © 2011-2022 走看看