Golang slice和map判等

借助reflect.DeepEqual可以实现两个slice和map的判等操作。

但是注意都说reflect是比较耗费性能的,如果真的对性能比较敏感的话自己写个for循环一个一个比较去吧。

package main

import (
	"fmt"
	"reflect"
)

func main() {
    
    
	// ============ slice 判等 ============
	{
    
    
		var a = []int{
    
    11, 22, 33}
		var b = []int{
    
    11, 22, 33}

		fmt.Println(reflect.DeepEqual(a, b)) // true
	}

	{
    
    
		var a = []int{
    
    11, 22, 33}
		var b = []int{
    
    11}

		fmt.Println(reflect.DeepEqual(a, b)) // false
	}

	{
    
    
		var a = []int{
    
    11, 22, 33}
		var b = []int64{
    
    11, 22, 33}

		fmt.Println(reflect.DeepEqual(a, b)) // false
	}

	// ============ map 判等 ============

	{
    
    
		var a = map[string]int{
    
    
			"a": 11,
			"b": 22,
		}

		var b = map[string]int{
    
    
			"a": 11,
			"b": 22,
		}

		fmt.Println(reflect.DeepEqual(a, b)) // true
	}

	{
    
    
		var a = map[string]int{
    
    
			"a": 11,
			"b": 22,
		}

		var b = map[string]int{
    
    
			"a": 11,
		}

		fmt.Println(reflect.DeepEqual(a, b)) // false
	}
}

参考链接:
https://www.cnblogs.com/apocelipes/p/11116725.html
http://shouce.jb51.net/gopl-zh/ch13/ch13-03.html
https://halfrost.com/go_slice/

猜你喜欢

转载自blog.csdn.net/weixin_52777294/article/details/115150250