我想检查两个结构是否相等,但有一些问题:
package main
import (
"fmt"
"reflect"
)
type T struct {
X int
Y string
Z []int
M map[string]int
}
func main() {
t1 := T{
X: 1,
Y: "lei",
Z: []int{1, 2, 3},
M: map[string]int{
"a": 1,
"b": 2,
},
}
t2 := T{
X: 1,
Y: "lei",
Z: []int{1, 2, 3},
M: map[string]int{
"a": 1,
"b": 2,
},
}
fmt.Println(t2 == t1)
//error - invalid operation: t2 == t1 (struct containing []int cannot be compared)
fmt.Println(reflect.ValueOf(t2) == …Run Code Online (Sandbox Code Playgroud) 如果我有一个像这样的结构:
type Foo struct {
title string
Tags map[string]string
}
Run Code Online (Sandbox Code Playgroud)
如何保持一套独特的结构?根据我的理解,虽然结构相等是一件事 - 地图平等不是.这意味着我无法比较我的上述结构.因此,我不能将地图实现为设置模式.
我能想到的两个可能有用的选项是:将标签转换为已排序[][]string或使用reflect.Deepequal.谁有更好的主意?