有一个简单的使用场景,就是当用户在一个设备上的时候,他会重复添加项目,比如一个TODO项目。除了自己添加的ID,我想再添加一个的ID。同时,用户只能添加一条记录,因此不会出现并发冲突。

可以想到的最简单的解决方法就是使用时间戳。所以我调查了可行性。

golang int的取值范围

Int32: -2147483648到2147483647。大约21亿

国际号码64: -9223372036854775808到9223372036854755。

时间戳的数值大小(秒)

但是在使用时间戳的时候,我们会遇到2038的问题,也就是2038以后,时间戳会超出int32的存储范围。虽然离2038年还很远。但是我觉得还是严格一点好。

2038年问题(也称为Y2038或Y2k38或Unix Y2K)涉及在许多数字系统中表示从1970年1月1日世界协调时00:00:00起经过的秒数,并将其存储为带符号的32位整数。此类实现不能对2038年1月19日世界协调时03:14:07之后的时间进行编码。与Y2K问题类似,2038年问题是由于用于表示时间的容量不足造成的。自1970年1月1日以来,可以使用带符号32位整数存储的最晚时间是2038年1月19日星期二的03:14:07(1970年1月1日之后231-1=2,147,483,647秒)。

包装总管

导入(

“fmt”

时间

)

func main() {

t :=int32(时间。现在()。Unix())

fmt。Println(t)

}

1257894000

更好使用datetime 200816220256的可读格式,到秒,可读,不易重复。不,超出了Int32的范围。

结论

嘿,让我们使用自添加的id,从-1开始并将其添加到-n。