Passing Build Time in Go
To pass build time stamp in Go, you can use -ldflags
when running go build
.
For example you have a variable residing in the package abc/build.go
As
package abc
var (
BuildTime = "Tue Dec 22 13:22:49 PKT 2020"
)
You will do the following and pass value of $(date)
(through shell)
By default the
date
will format string as Unix timestamp
go build -ldflags="-X 'abc.BuildTime=$(date)'"
We can now use time
’s function .Parse(layout, str)
to process this string as a time stamp in go
.
t1, err := time.Parse(time.UnixDate, BuildTime)
Here you can see the full example + a bonus function which calculates the elapsed time also (GetStringForBuildTime()
).
package abc
import (
"fmt"
"math"
"strings"
"time"
)
var (
BuildTime = "Tue Dec 22 13:22:49 PKT 2020"
)
func BuildTimeElapsed() (hs float64, ms float64, ss float64) {
t1, err := time.Parse(time.UnixDate, BuildTime)
if err != nil {
return 0, 0, 0
}
t2 := time.Now()
var mf, sf float64
hs = t2.Sub(t1).Hours()
hs, mf = math.Modf(hs)
ms = mf * 60
ms, sf = math.Modf(ms)
ss = sf * 60
return
}
func GetStringForBuildTime() string {
h, m, s := BuildTimeElapsed()
var tsList []string
if h > 0 {
tsList = append(tsList, fmt.Sprintf("%.f hour(s)", h))
}
if m > 0 {
tsList = append(tsList, fmt.Sprintf("%.f minute(s)", m))
}
if s > 0 {
tsList = append(tsList, fmt.Sprintf("%.2f second(s)", s))
}
return strings.Join(tsList, ", ")
}
Have fun, coding!