《Go 常用代码片段》
1. 输出变量的类型
package main
import "fmt"
func main() {
anInt := 1234 // 整型
aString := "Hello" // 字符串
aFloat := 3.14 // 浮点型
fmt.Printf("%T\n", anInt) // int
fmt.Printf("%T\n", aString) // string
fmt.Printf("%T\n", aFloat) // float64
}
也可以使用反射:reflect.TypeOf(变量).String()。
package main
import (
"fmt"
"reflect"
)
func main() {
anInt := 1234
fmt.Println(reflect.TypeOf(anInt).String()) // int
}
2. 生成定长随机字符串
package main
import (
"fmt"
"math/rand"
"os"
"strings"
"time"
)
var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
var tld = map[int]string{0: ".org", 1: ".net", 2: ".com", 3: ".io", 4: ".cn", 5: ".edu"}
func randStringRunes(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letterRunes[rand.Intn(len(letterRunes))]
}
return string(b)
}
func init() {
rand.Seed(time.Now().UnixNano())
}
func main() {
file, _ := os.OpenFile("data.txt", os.O_RDWR|os.O_TRUNC|os.O_CREATE|os.O_APPEND, 0755)
zone := strings.ToLower(RandStringRunes(5)) + tld[rand.Intn(len(tld))]
zoneId := RandStringRunes(24)
fmt.Fprintf(file, "%s,%s\n", zone, zoneId)
}
3. 在 init 中初始化 Logger,日志文件放到源码所在目录
import (
"log"
"os"
"path"
"runtime"
)
var logger *log.Logger
func getCwd() string {
_, fileName, _, ok := runtime.Caller(0)
if !ok {
panic("No caller information")
}
return path.Dir(fileName)
}
func init() {
logFile := path.Join(getCwd(), "app.log")
file, err := os.OpenFile(logFile, os.O_RDWR|os.O_TRUNC|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
panic(err)
}
logger = log.New(file, "", log.Lshortfile|log.Ldate|log.Ltime)
}
4. 编译时注入版本信息
通过 -ldflags 在编译时把版本号、commit、构建时间注入到程序中。
package main
import (
"fmt"
"os"
)
var (
gitHash string
buildTime string
goVersion string
)
func main() {
args := os.Args
if len(args) == 2 && (args[1] == "--version" || args[1] == "-v") {
fmt.Printf("Git Commit Hash: %s \n", gitHash)
fmt.Printf("Build TimeStamp: %s \n", buildTime)
fmt.Printf("GoLang Version: %s \n", goVersion)
return
}
}
构建脚本(version.go 中声明了 gitHash 等变量):
go build -ldflags "\
-X 'main.goVersion=$(go version)' \
-X 'main.gitHash=$(git show -s --format=%H)' \
-X 'main.buildTime=$(git show -s --format=%cd)'" \
-o main
阅读 —
·
全站 —