zoukankan      html  css  js  c++  java
  • GO语言中结构体的(== 和 !=)比较

    GO语言中结构体的比较

    1. 同一个struct的两个实例能用 == 或 != 来进行比较吗

    答案:可以能,也可以不能

    如果结构体内的所有成员变量都是可以比较的,那么结构体就可以进行比较。

    如果结构体中存在不可以比较的成员变量那么结构体就不能进行比较。

    那么哪些数据类型是可以比较的呢?

    1. 简单类型

    2. 可排序的数据类型

    1. 整型
    2. 浮点型
    3. 字符串
    

    3. 其他可比较类型

    Boolean
    Complex
    Pointer
    Channel     // 注意Channel 是可以进行比较的
    Interface   // 接口
    Array   
    

    不可比较类型

    Slice 
    Map
    Function
    

    可比较的结构体例子

    package main
    
    import "fmt"
    
    type User struct {
    	a int
    }
    
    func main() {
    	a := User{a:1}
    	b := User{a:1}
    	c := User{a:2}
    
    	fmt.Println(a == b) // true
    	fmt.Println(b == c) // false
    }
    
    

    加入不可比较的复杂类型

    type People struct {
    	name   string
    	m      map[int]int
    	weight int
    }
    
    func CantNotComparable() {
    	p1 := People{
    		name:   "wang",
    		m:      make(map[int]int),
    		weight: 0,
    	}
    	p2 := People{
    		name:   "wang",
    		m:      make(map[int]int),
    		weight: 0,
    	}
    	fmt.Println(p1 == p2)  // 此时编译器会直接显示错误 无法编译通过
    }
    

    如果此时其改为指向结构体的指针,此时报错提示会取消,因为此时实际上相当于在比较两个指针类型的变量

    func CantNotComparable() {
    	p1 := &People{
    		name:   "wang",
    		m:      make(map[int]int),
    		weight: 0,
    	}
    	p2 := &People{
    		name:   "wang",
    		m:      make(map[int]int),
    		weight: 0,
    	}
    	fmt.Println(&p1, &p2)
    	fmt.Println(p1 == p2)
    }
    

    2. 两个不同的struct的实例能不能比较 == !=

    答案:可以能,也可以不能

    如果想要比较两个不同的struct的实例的话,需要先进行结构类型的转换
    转换成同一个结构类型才可以进行比较
    
    结构体之间进行转换需要他们具备完全相同的成员(字段名、字段类型、字段个数)
    
    func CantNotComparable() {
    	p1 := People{
    		name:   "wang",
    		weight: 0,
    	}
    	p2 := User{
    		name:   "wang",
    		weight: 1,
    	}
    	p3 := People(p2)  // 进行结构体转换
    	fmt.Println(p1 == p3)
    }
    

    参考内容

    https://blog.csdn.net/jcetpoor/article/details/108946530

    https://blog.csdn.net/daima_caigou/article/details/91418969

  • 相关阅读:
    053364
    053363
    oracle导出批量表N行记录
    053362
    053361
    053360
    053359
    053358
    053357
    053356
  • 原文地址:https://www.cnblogs.com/wlw-x/p/14213434.html
Copyright © 2011-2022 走看看