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是进行值比较

    缺点:运行时间慢

  • 相关阅读:
    linux下tomcat权限的问题
    树莓派安装Tomcat服务器
    Javascript基础——Object对象和Object原型对象
    electron
    ES6-21:编程风格、ECMAScript规格
    番外篇01:angularJS最佳实战
    ES6-18:class类及其继承
    ES6-10:Promise
    ES6-09:新增API—Proxy、Reflect
    ES6-08:新增数据结构—Set、WeakSet、Map、weakMap
  • 原文地址:https://www.cnblogs.com/MyUniverse/p/15726868.html
Copyright © 2011-2022 走看看