<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      我在這里-> silenceper.com

      如何在Go項目中輸出版本信息?

      我們經常在使用CLI工具的時候,都會有這樣的參數輸出:

      ?  ~ docker version
      Client: Docker Engine - Community
       Version:           18.09.2
       API version:       1.39
       Go version:        go1.10.8
       Git commit:        6247962
       Built:             Sun Feb 10 04:12:39 2019
       OS/Arch:           darwin/amd64
       Experimental:      false
      ?  ~

      可以打印出構建時對應的版本信息,比如 Version,Go Version,Git Commit等,這個是如何實現的呢?

      實現

      主要是通過ldflags參數來實現在構建的時候對變量進行賦值。

      比如下面一段代碼:

      package main
      
      import (
          "flag"
          "fmt"
          "os"
      )
      
      //需要賦值的變量
      var version = ""
      
      //通過flag包設置-version參數
      var printVersion bool
      
      func init() {
          flag.BoolVar(&printVersion, "version", false, "print program build version")
          flag.Parse()
      }
      
      func main() {
          if printVersion {
              println(version)
              os.Exit(0)
          }
          fmt.Printf("example for print version")
      }

      構建命令:

      go build -ldflags "-X main.version=v0.1" -o example

      程序輸出:

      ? ./example
      version=v0.1

      參數說明

      1、-ldflags build命令中用于調用接鏈接器的參數

      -ldflags '[pattern=]arg list'
          arguments to pass on each go tool link invocation.

      2、-X 鏈接器參數,主要用于設置變量

      -X importpath.name=value
          Set the value of the string variable in importpath named name to value.
          Note that before Go 1.5 this option took two separate arguments.
          Now it takes one argument split on the first = sign.

      一個完整的例子

      這里將version包單獨做了一個包存放,只需要引入即可:

      package main
      
      import (
          "flag"
      
          "github.com/go-demo/version"
      )
      
      //通過flag包設置-version參數
      var printVersion bool
      
      func init() {
          flag.BoolVar(&printVersion, "version", false, "print program build version")
          flag.Parse()
      }
      
      func main() {
          if printVersion {
              version.PrintVersion()
          }
      }

      構建的shell如下(也可以放在Makefile中):

      #!/bin/sh
      version="v0.1"
      path="github.com/go-demo/version"
      flags="-X $path.Version=$version -X '$path.GoVersion=$(go version)' -X '$path.BuildTime=`date +"%Y-%m-%d %H:%m:%S"`' -X $path.GitCommit=`git rev-parse HEAD`"
      go build -ldflags "$flags" -o example example-version.go

      TIPS: 如果值內容中含有空格,可以用單引號

      最終版本輸出:

      ? sh build.sh
      ? ./example -version
      Version: v0.1
      Go Version: go version go1.13.1 darwin/amd64
      Git Commit: a775ecd27c5e78437b605c438905e9cc888fbc1c
      Build Time: 2020-01-09 19:01:51

      完整代碼:https://github.com/go-demo/ve...

      本文在公眾號"學點程序"首發學點程序
      posted on 2020-01-09 21:33  seekrays2  閱讀(880)  評論(1)    收藏  舉報

      產品:seekrays

      主站蜘蛛池模板: 国产精品先锋资源在线看| 中文字幕在线无码一区二区三区| 在线免费播放av观看| 国产成人亚洲欧美二区综合| 无遮挡aaaaa大片免费看| 国产精品久久久一区二区三区 | 国产成人综合欧美精品久久| 色国产视频| 日韩午夜一区二区福利视频 | 伊人久久大香线蕉AV网禁呦| 美女胸18下看禁止免费视频| 5D肉蒲团之性战奶水欧美| 好硬好湿好爽好深视频| 又爽又黄又无遮挡的激情视频| 少妇被日自拍黄色三级网络| 女人被爽到高潮视频免费国产| 国产精品自拍午夜福利| 人妻少妇精品视频专区| 制服丝袜美腿一区二区| 亚洲国产精品成人av网| 中文字幕有码无码AV| 高潮精品熟妇一区二区三区| 午夜无码国产18禁| 无码人妻精品一区二区三区下载| 亚洲青青草视频在线播放| 免费VA国产高清大片在线| 久久香蕉国产线看观看猫咪av| 国产午夜伦伦午夜伦无码| 国产亚洲亚洲国产一二区| 噜噜综合亚洲av中文无码| 久久中文字幕一区二区| 久久AV中文综合一区二区| 中文字幕日韩精品人妻| 久久成人 久久鬼色| 亚洲激情av一区二区三区| 国产一区在线播放av| 啦啦啦中文在线观看日本| 伊人久久久av老熟妇色| 色偷偷中文在线天堂中文| 久久天天躁狠狠躁夜夜躁| 91老肥熟女九色老女人|