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

    缺点:运行时间慢

  • 相关阅读:
    Java MyBatis 插入数据库返回主键
    FISCO-BCOS平台共识
    分布式一致性协议介绍(Paxos、Raft)
    分布式问题分析
    分布式基础知识
    比特币编译(Ubuntu 16.04)
    比特币源代码分析(1)
    c++中的多线程
    剑指offer中数据结构与算法部分学习
    基础的语法知识汇总
  • 原文地址:https://www.cnblogs.com/MyUniverse/p/15726868.html
Copyright © 2011-2022 走看看