Golang如何获取当前源文件的最新编译时间和日期?

此代码返回当前源文件的最新编译时间和日期:


package main


/*

#include<stdint.h>

#include<string.h>

void getCompileDateTime(uint8_t  dt[12],uint8_t tm[9]){

  strcpy(dt, __DATE__); //Mmm dd yyyy

  strcpy(tm,__TIME__);  //hh:mm:ss

}

*/

import "C"

import (

    "fmt"

    "unsafe"

)


func main() {

    dt := make([]byte, 12)

    tm := make([]byte, 10)

    C.getCompileDateTime((*C.uint8_t)(unsafe.Pointer(&dt[0])), (*C.uint8_t)(unsafe.Pointer(&tm[0])))

    dts, tms := string(dt), string(tm)

    fmt.Println(dts, tms)

}

是否有纯粹的 Golang 方法或者这是唯一的方法?


呼啦一阵风
浏览 161回答 3
3回答

Helenr

找到了另一种使用go 链接器上的选项来分配字符串的方法:-X 导入路径名=值将 importpath 中名为 name 的字符串变量的值设置为 value。请注意,在 Go 1.5 之前,此选项采用两个单独的参数。现在它需要在第一个 = 符号上拆分一个参数。代码示例:package mainimport "fmt"var compileDate stringfunc main() {&nbsp; &nbsp;fmt.Println(compileDate )}搭建时:go build -ldflags "-X main.compileDate=`date -u +.%Y%m%d.%H%M%S`" main.go这种方法的优点是,它可以通过构建脚本更加独立于操作系统,而不会乱扔代码 go:generate

猛跑小猪

使用 go:generate。作为构建过程的一部分,您必须在运行go generate程序之前运行。您可以将其封装在共享函数中以跨文件使用。package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "io/ioutil"&nbsp; &nbsp; "strconv"&nbsp; &nbsp; "time"&nbsp; &nbsp; "strings")//go:generate sh -c "date +'%s' > main_timestamp.go.txt"func main() {&nbsp; &nbsp; txt, err := ioutil.ReadFile("main_timestamp.go.txt")&nbsp; &nbsp; if err == nil {&nbsp; &nbsp; &nbsp; &nbsp; i, err := strconv.ParseInt(strings.TrimSpace(string(txt)), 10, 64)&nbsp; &nbsp; &nbsp; &nbsp; if err == nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t := time.Unix(i, 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("%s", t)&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("error parsing file %s", err)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("error reading file %s", err)&nbsp; &nbsp; }}

慕虎7371278

在开发期间几乎相同的不是编译时间,而是可执行修改时间。当然,复制可执行文件时它可能会出错,但它可能对某人有帮助:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "os")var (&nbsp; &nbsp; linkTime string)func main() {&nbsp; &nbsp; fi, _ := os.Stat(os.Args[0])&nbsp; &nbsp; linkTime = fi.ModTime().String()&nbsp; &nbsp; fmt.Println(linkTime)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go