国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Gin實踐 番外 Golang交叉編譯

劉德剛 / 535人閱讀

摘要:交叉編譯項目地址快上車,支持一波原文地址前言在連載九講解構建鏡像時,我們編譯可執行文件用了另外一個形式的命令,不知道你有沒有疑問說明我們將講解命令各個參數的作用,希望你在閱讀時,將每一項串聯起來,你會發現這就是交叉編譯相關的小知識

Golang交叉編譯

項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)

原文地址:https://segmentfault.com/a/11...

前言

在 連載九 講解構建Scratch鏡像時,我們編譯可執行文件用了另外一個形式的命令,不知道你有沒有疑問?

$ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o go-gin-example .
說明

我們將講解命令各個參數的作用,希望你在閱讀時,將每一項串聯起來,你會發現這就是交叉編譯相關的小知識

也就是 Golang 令人心動的特性之一跨平臺編譯

一、CGO_ENABLED

作用:

用于標識(聲明) cgo 工具是否可用

意義:

存在交叉編譯的情況時,cgo 工具是不可用的。在標準go命令的上下文環境中,交叉編譯意味著程序構建環境的目標計算架構的標識與程序運行環境的目標計算架構的標識不同,或者程序構建環境的目標操作系統的標識與程序運行環境的目標操作系統的標識不同

小結:

結合案例來說,我們是在宿主機編譯的可執行文件,而在 Scratch 鏡像運行的可執行文件;顯然兩者的計算機架構、運行環境標識你無法確定它是否一致(畢竟構建的 docker 鏡像還可以給他人使用),那么我們就要進行交叉編譯,而交叉編譯不支持 cgo,因此這里要禁用掉它

關閉 cgo 后,在構建過程中會忽略 cgo 并靜態鏈接所有的依賴庫,而開啟 cgo 后,方式將轉為動態鏈接

補充:

golang 是默認開啟 cgo 工具的,可執行 go env 命令查看

$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
...
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
...
二、GOOS

用于標識(聲明)程序構建環境的目標操作系統

如:

linux

windows

三、GOARCH

用于標識(聲明)程序構建環境的目標計算架構

若不設置,默認值與程序運行環境的目標計算架構一致(案例就是采用的默認值)

如:

amd64

386

系統 GOOS GOARCH
Windows 32位 windows 386
Windows 64位 windows amd64
OS X 32位 darwin 386
OS X 64位 darwin amd64
Linux 32位 linux 386
Linux 64位 linux amd64
四、GOHOSTOS

用于標識(聲明)程序運行環境的目標操作系統

五、GOHOSTARCH

用于標識(聲明)程序運行環境的目標計算架構

六、go build -a

強制重新編譯,簡單來說,就是不利用緩存或已編譯好的部分文件,直接所有包都是最新的代碼重新編譯和關聯

-installsuffix

作用:

在軟件包安裝的目錄中增加后綴標識,以保持輸出與默認版本分開

補充:

如果使用 -race 標識,則后綴就會默認設置為 -race 標識,用于區別 race 和普通的版本

-o

指定編譯后的可執行文件名稱

小結

大部分參數指令,都有一定關聯性,且與交叉編譯的知識點相關,可以好好品味一下

最后可以看看 go build help 加深了解

$ go help build
usage: go build [-o output] [-i] [build flags] [packages]
...
    -a
        force rebuilding of packages that are already up-to-date.
    -n
        print the commands but do not run them.
    -p n
        the number of programs, such as build commands or
        test binaries, that can be run in parallel.
        The default is the number of CPUs available.
    -race
        enable data race detection.
        Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
    -msan
        enable interoperation with memory sanitizer.
        Supported only on linux/amd64,
        and only with Clang/LLVM as the host C compiler.
    -v
        print the names of packages as they are compiled.
    -work
        print the name of the temporary work directory and
        do not delete it when exiting.
    -x
        print the commands.

    -asmflags "[pattern=]arg list"
        arguments to pass on each go tool asm invocation.
    -buildmode mode
        build mode to use. See "go help buildmode" for more.
    -compiler name
        name of compiler to use, as in runtime.Compiler (gccgo or gc).
    -gccgoflags "[pattern=]arg list"
        arguments to pass on each gccgo compiler/linker invocation.
    -gcflags "[pattern=]arg list"
        arguments to pass on each go tool compile invocation.
    -installsuffix suffix
        a suffix to use in the name of the package installation directory,
        in order to keep output separate from default builds.
        If using the -race flag, the install suffix is automatically set to race
        or, if set explicitly, has _race appended to it. Likewise for the -msan
        flag. Using a -buildmode option that requires non-default compile flags
        has a similar effect.
    -ldflags "[pattern=]arg list"
        arguments to pass on each go tool link invocation.
    -linkshared
        link against shared libraries previously created with
        -buildmode=shared.
    -pkgdir dir
        install and load all packages from dir instead of the usual locations.
        For example, when building with a non-standard configuration,
        use -pkgdir to keep generated packages in a separate location.
    -tags "tag list"
        a space-separated list of build tags to consider satisfied during the
        build. For more information about build tags, see the description of
        build constraints in the documentation for the go/build package.
    -toolexec "cmd args"
        a program to use to invoke toolchain programs like vet and asm.
        For example, instead of running asm, the go command will run
        "cmd args /path/to/asm ".
...
參考 本系列示例代碼

go-gin-example

本系列目錄

連載一 Golang介紹與環境安裝

連載二 搭建Blog API"s(一)

連載三 搭建Blog API"s(二)

連載四 搭建Blog API"s(三)

連載五 使用JWT進行身份校驗

連載六 編寫一個簡單的文件日志

連載七 Golang優雅重啟HTTP服務

連載八 為它加上Swagger

連載九 將Golang應用部署到Docker

連載十 定制 GORM Callbacks

連載十一 Cron定時任務

連載十二 優化配置結構及實現圖片上傳

連載十三 優化你的應用結構和實現Redis緩存

連載十四 實現導出、導入 Excel

連載十五 生成二維碼、合并海報

連載十六 在圖片上繪制文字

連載十七 用 Nginx 部署 Go 應用

番外 Golang交叉編譯

番外 請入門 Makefile

書籍

Go并發編程實戰 第二版

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28463.html

相關文章

  • Gin實踐 番外 Golang交叉編譯

    摘要:交叉編譯項目地址快上車,支持一波原文地址前言在連載九講解構建鏡像時,我們編譯可執行文件用了另外一個形式的命令,不知道你有沒有疑問說明我們將講解命令各個參數的作用,希望你在閱讀時,將每一項串聯起來,你會發現這就是交叉編譯相關的小知識 Golang交叉編譯 項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波) 原文地址:https://segme...

    alighters 評論0 收藏0
  • Golang Gin實踐 番外 請入門 Makefile

    摘要:也可以是某個操作的名字標簽,稱為偽目標前置條件,這一項是可選參數。明明只是執行命令,為什么會打印到標準輸出上了原因默認會打印每條命令,再執行。 Golang Gin實踐 番外 請入門 Makefile 原文地址:Golang Gin實踐 番外 請入門 Makefile 前言 含一定復雜度的軟件工程,基本上都是先編譯 A,再依賴 B,再編譯 C...,最后才執行構建 如果每次都人為編排,...

    bigdevil_s 評論0 收藏0
  • Gin實踐 連載九 將Golang應用部署到Docker

    摘要:將應用部署到項目地址快上車,支持一波原文地址注開始前你需要安裝好,配好鏡像源本章節源碼在分支上從本章節開始項目目錄都以為基準請配合自己本地項目靈活變動介紹在這里簡單介紹下,建議深入學習是一個開源的輕量級容器技術,讓開發者可以打包他們 將Golang應用部署到Docker 項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)原文地址:https...

    Half 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<