有一个简单的使用场景,就是当用户在一个设备上的时候,他会重复添加项目,比如一个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。