在Go语言中,结构体类型默认不支持相等操作符(==)。这会导致在比较两个结构体是否相等时出现错误提示“无效运算: WxChatMessageList == (common.WxChatMessageList{}) (在 common.WxChatMessageList 中未定义运算符 ==)”。

为了解决这个问题,我们可以使用以下两种方法:

1. 使用 reflect.DeepEqual() 函数

reflect.DeepEqual() 函数可以比较两个任意类型的值是否相等,包括结构体。例如:

import "reflect"

type WxChatMessageList struct {
	Type          string          `json:"type"`
	WxChatMessage []WxChatMessage `json:"wxChatMessage"`
}

type WxChatMessage struct {
	First    string `json:"first"`
	Keyword1 string `json:"keyword1"`
	Keyword2 string `json:"keyword2"`
	Keyword3 string `json:"keyword3"`
	Keyword4 string `json:"keyword4"`
	Keyword5 string `json:"keyword5"`
	Keyword6 string `json:"keyword6"`
	Remark   string `json:"remark"`
}

var WxChatMessageList common.WxChatMessageList

if reflect.DeepEqual(WxChatMessageList, common.WxChatMessageList{}) {
	// do something
}

2. 自定义 Equal() 方法

我们可以为结构体自定义一个 Equal() 方法来比较两个结构体的值是否相等。例如:

func (w *WxChatMessageList) Equal(other *WxChatMessageList) bool {
	if len(w.WxChatMessage) != len(other.WxChatMessage) {
		return false
	}
	for i, msg := range w.WxChatMessage {
		if !reflect.DeepEqual(msg, other.WxChatMessage[i]) {
			return false
		}
	}
	return true
}

// 比较两个结构体是否相等
if WxChatMessageList.Equal(&common.WxChatMessageList{}) {
	// do something
}

通过以上两种方法,我们可以有效地解决Go语言中结构体比较的“无效运算符 ==”问题。

Go 结构体比较:解决无效运算符 == 问题

原文地址: https://www.cveoy.top/t/topic/lIbL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录