《Go 常用代码片段》

《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
阅读 — · 全站 —
🎸 我的歌单 0 首