3 回答

TA貢獻1780條經驗 獲得超4個贊
找到了另一種使用go 鏈接器上的選項來分配字符串的方法:
-X 導入路徑名=值
將 importpath 中名為 name 的字符串變量的值設置為 value。請注意,在 Go 1.5 之前,此選項采用兩個單獨的參數?,F在它需要在第一個 = 符號上拆分一個參數。
代碼示例:
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 關注
- 195 瀏覽
添加回答
舉報