3 回答
TA贡献1780条经验 获得超4个赞
找到了另一种使用go 链接器上的选项来分配字符串的方法:
-X 导入路径名=值
将 importpath 中名为 name 的字符串变量的值设置为 value。请注意,在 Go 1.5 之前,此选项采用两个单独的参数。现在它需要在第一个 = 符号上拆分一个参数。
代码示例:
package main
import "fmt"
var compileDate string
func main() {
fmt.Println(compileDate )
}
搭建时:
go build -ldflags "-X main.compileDate=`date -u +.%Y%m%d.%H%M%S`" main.go
这种方法的优点是,它可以通过构建脚本更加独立于操作系统,而不会乱扔代码 go:generate
TA贡献1858条经验 获得超8个赞
使用 go:generate。作为构建过程的一部分,您必须在运行go generate程序之前运行。您可以将其封装在共享函数中以跨文件使用。
package main
import (
"fmt"
"io/ioutil"
"strconv"
"time"
"strings"
)
//go:generate sh -c "date +'%s' > main_timestamp.go.txt"
func main() {
txt, err := ioutil.ReadFile("main_timestamp.go.txt")
if err == nil {
i, err := strconv.ParseInt(strings.TrimSpace(string(txt)), 10, 64)
if err == nil {
t := time.Unix(i, 0)
fmt.Printf("%s", t)
} else {
fmt.Printf("error parsing file %s", err)
}
} else {
fmt.Printf("error reading file %s", err)
}
}
TA贡献1802条经验 获得超4个赞
在开发期间几乎相同的不是编译时间,而是可执行修改时间。当然,复制可执行文件时它可能会出错,但它可能对某人有帮助:
package main
import (
"fmt"
"os"
)
var (
linkTime string
)
func main() {
fi, _ := os.Stat(os.Args[0])
linkTime = fi.ModTime().String()
fmt.Println(linkTime)
}
- 3 回答
- 0 关注
- 160 浏览
添加回答
举报