登录
首页 >  Golang >  Go问答

检测两个结构是否相同的方法

来源:stackoverflow

时间:2024-03-12 23:00:28 294浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《检测两个结构是否相同的方法》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我有这个结构的两个实例,其中包含引用(作为属性):

type ST struct {
 some *float64
 createdAt *time.Time
}

如何对该结构的两个不同实例执行相等性检查?只能用reflect吗?


解决方案


虽然您可以使用反射 as Corey Ogburn suggested,但对于这样的简单结构我不会这样做。根据 go 官方博客,反思是

-- The Laws of Reflection

编写一个函数应该是一个简单的练习,该函数接受两个指向结构类型值的指针,并返回一个布尔值 true/false 以判断它们是否相等,首先测试 nil 指针,然后测试结构体的每个字段相等。

time.time 值已经有 an equality test method 带签名

func (t Time) Equal(u Time) bool

根据您的用例,更大的问题可能是比较两个浮点值是否相等。虽然 ==float64 值进行比较 work,但对于许多应用程序,您希望两个浮点值在接近以及完全相同时被视为相等。如果您的应用程序属于这种情况,我建议定义一个接受精度的 equal 函数,并验证两个值之间的差值是否不大于该精度。要了解更多信息,请研究十进制值的浮点表示形式。

请注意,time 软件包文档中有以下关于使用指针的信息:say

因此,您可能应该更改结构中 createdat 的类型。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《检测两个结构是否相同的方法》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>