zoukankan      html  css  js  c++  java
  • golang 相同结构体比较方式比较

    golang 相同结构体比较方式比较

    使用==

    示例:

    type Student struct {
    	Name string
    	Age  int
    }
    type Class struct {
    	Name string
    }
    func main() {
    	s1 := Student{
    		Name: "ysm",
    		Age:  23,
    	}
    	s2 := Student{
    		Name: "ysm",
    		Age:  23,
    	}
    	if s1 == s2 {
    		log.Println("这两个值相同")
    	} else {
    		log.Println("这两个值不相同")
    	}
    }
    # 输出:这两个值相同
    

    缺点:如果结构体中有指针类型,就不能够进行比较。因为对于指针类型的比较是比较地址,不是比较指针指向的内容

    示例:

    type Student struct {
    	Name string
    	Age  int
    	C    *Class
    }
    
    type Class struct {
    	Name string
    }
    
    func main() {
    	s1 := Student{
    		Name: "ysm",
    		Age:  23,
    		C: &Class{
    			Name: "3班",
    		},
    	}
    	s2 := Student{
    		Name: "ysm",
    		Age:  23,
    		C: &Class{
    			Name: "3班",
    		},
    	}
    	if s1 == s2 {
    		log.Println("这两个值相同")
    	} else {
    		log.Println("这两个值不相同")
    	}
    }
    # 输出:这两个值不相同
    

    使用reflect.DeepEqual

    示例:

    type Student struct {
    	Name string
    	Age  int
    	C    *Class
    }
    
    type Class struct {
    	Name string
    }
    
    func main() {
    	s1 := Student{
    		Name: "ysm",
    		Age:  23,
    		C: &Class{
    			Name: "3班",
    		},
    	}
    	s2 := Student{
    		Name: "ysm",
    		Age:  23,
    		C: &Class{
    			Name: "3班",
    		},
    	}
    	if reflect.DeepEqual(s1, s2) {
    		log.Println("这两个值相同")
    	} else {
    		log.Println("这两个值不相同")
    	}
    }
    # 输出:这两个值相同
    

    原因:使用reflect.DeepEqual是进行值比较

    缺点:运行时间慢

  • 相关阅读:
    两类斯特林数的整理
    SXOI2019游记
    3.13校内测试
    Python Flask 实现移动端应用接口(API)
    CentOS下实现Flask + Virtualenv + uWSGI + Nginx部署
    iOS组件化开发入门 —— 提交自己的私有库
    Runtime ----- 带你上道
    iOS核心动画以及UIView动画的介绍
    GCD中各种队列和任务执行方式的组合
    iOS消息转发机制和使用
  • 原文地址:https://www.cnblogs.com/MyUniverse/p/15726868.html
Copyright © 2011-2022 走看看