Golang中time.Time类型没有UnixMilli方法或字段的解决方法
Golang中time.Time类型没有UnixMilli方法或字段的解决方法 我在推送代码到GitHub后,在Circle CI中遇到了这个问题(见下图)。
Go版本:1.15
有没有办法在不将Go升级到至少1.17版本的情况下解决这个问题?

@MIMOMODE - 我很好奇,你为什么还停留在 Go 1.15 版本?
更多关于Golang中time.Time类型没有UnixMilli方法或字段的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
该函数似乎从 Go 1.16 及更高版本开始可用…
顺便说一下,我正在使用 time.Now() 函数,问题很可能出在这里。
感谢大家的回答。我的老板希望我将Go升级到1.19版本。这困难吗(我之前从未使用过Go)?比如,我是否只需要在Docker中更改版本,然后在服务器上重新构建项目?
不。time.Time.UnixMilli 方法直到 Go 1.17 才被添加,因此你不能在 Go 1.15 中使用它。你可以修改你的代码,调用在 Go 1.15 中确实存在的 time.Time.UnixNano,然后将结果除以 1,000,000。
func main() {
fmt.Println("hello world")
}
谢谢,所以基本上这应该不会是个问题。我尝试升级到 Go 1.17,但出现了这个错误:

升级到 Go 1.19 版本。这困难吗?
这应该比其他语言更容易。
Go1 兼容性承诺 指出,所有 Go 源代码,无论多么古老,基本上应该都能与最新的 Go 1.x 工具链一起工作。
其意图是,遵循 Go 1 规范编写的程序在该规范的生命周期内,无需修改即可继续正确编译和运行。
然而,也存在一些值得注意的例外情况。例如,安全修复可能会破坏这种向后兼容性,因为安全性的优先级更高。 我建议阅读这篇文章,并研究完整的例外情况列表以及特定于操作系统和工具链的限制。
无论如何,进行彻底的测试是明智的。但我敢说,升级 Go 工具链所引发问题的风险和严重程度,远比那些在保持向后兼容性上投入不多的其他语言要小得多。
我在开发一个Go语言的命令行工具时遇到了这个问题。该工具在Windows命令提示符或PowerShell中编译和运行完全正常,但当我尝试使用WSL(Ubuntu版本1)时,却收到以下错误信息。
time.Now().UnixMilli undefined (type time.Time has no field or method UnixMilli)
使用 time.Now().UnixMilli() 的文件已经包含了time包 import(..."time"...),并且由于代码在Windows终端中能正确编译和运行,所以它没有在其他地方被重新定义。因此,我认为这与Windows下的Linux子系统有关。
我尝试过将 $GOROOT 和 $GOPATH 更新到多个不同的位置,包括尝试连接到挂载的Windows系统 /mnt/c/ 上安装的Go(这导致了另一个不知道如何编译的错误,这很合理,因为那是Windows版本的Go)。我也尝试过使用 apt-get 和 tar 为Ubuntu卸载并重新安装多个版本的Go。
我不确定为什么它无法正常工作,非常希望能得到其他人的任何见解。
谢谢!
在Go 1.15中,time.Time确实没有UnixMilli()方法。你可以通过以下方式获取毫秒时间戳:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
// 方法1: 使用UnixNano()除以1e6
unixMilli := now.UnixNano() / int64(time.Millisecond)
fmt.Printf("Unix毫秒时间戳: %d\n", unixMilli)
// 方法2: 使用Unix()乘以1000加上纳秒部分
unixMilli2 := now.Unix()*1000 + int64(now.Nanosecond())/1e6
fmt.Printf("Unix毫秒时间戳: %d\n", unixMilli2)
// 如果需要从毫秒时间戳创建time.Time
millis := int64(1609459200000) // 2021-01-01 00:00:00 UTC
t := time.Unix(millis/1000, (millis%1000)*int64(time.Millisecond))
fmt.Printf("从毫秒创建的时间: %v\n", t)
}
这两种方法都能在Go 1.15中正常工作,且结果与Go 1.17+中的UnixMilli()方法一致。

