国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

跨平臺(tái)編譯go(交叉編譯)

這篇具有很好參考價(jià)值的文章主要介紹了跨平臺(tái)編譯go(交叉編譯)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

以將一個(gè)簡(jiǎn)單的go http 部署到docker為例!

方法一:構(gòu)建service鏡像同時(shí)拉取go鏡像

Dockerfile文件

# alpine Linux發(fā)行版,該發(fā)行版的大小很小并且內(nèi)置了Go
FROM golang:alpine

# 設(shè)置linux環(huán)境變量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 設(shè)置鏡像內(nèi)工作目錄
WORKDIR /build

# 將代碼復(fù)制到容器中
COPY . .

# 將代碼編譯成二進(jìn)制可執(zhí)行文件app
RUN go build -o app .

# 移動(dòng)到用于存放生成的二進(jìn)制文件的 /dist 目錄
WORKDIR /dist

# 將二進(jìn)制文件從 /build 目錄復(fù)制到/dist
RUN cp /build/app .

# 暴露端口
EXPOSE 8888

# 啟動(dòng)容器時(shí)運(yùn)行的命令
CMD ["/dist/app"]

構(gòu)建

  1. docker build . -t goweb_app
  2. docker run -p 8888:8888 goweb_app

方法二:分階段構(gòu)建,不保留源碼文件和編譯器

在最終的鏡像中是不需要go編譯器的,也就是說(shuō)只需要一個(gè)運(yùn)行最終二進(jìn)制文件的容器即可。

FROM golang:alpine AS builder

# 為我們的鏡像設(shè)置必要的環(huán)境變量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 移動(dòng)到工作目錄:/build
WORKDIR /build

# 將代碼復(fù)制到容器中
COPY . .

# 將我們的代碼編譯成二進(jìn)制可執(zhí)行文件 app
RUN go build -o app .

###################
# 接下來(lái)創(chuàng)建一個(gè)小鏡像
###################
FROM scratch

# 從builder鏡像中把/dist/app 拷貝到當(dāng)前目錄
COPY --from=builder /build/app /

# 需要運(yùn)行的命令
ENTRYPOINT ["/app"]

方法三:本地跨平臺(tái)編譯后,丟到服務(wù)器

交叉編譯(跨平臺(tái)編譯)

  1. Golang 支持交叉編譯,在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)的可執(zhí)行程序。
  2. golang中跨平臺(tái)交叉編譯涉及兩個(gè)重要的環(huán)境變量:GOOS 和 GOARCH,分別代表 Target Host OS 和 Target Host ARCH。

比較重要的幾個(gè)參數(shù)

GOARCH="amd64" // 程序構(gòu)建環(huán)境的目標(biāo)計(jì)算架構(gòu)
GOOS="linux" // 程序構(gòu)建環(huán)境的目標(biāo)操作系統(tǒng)
CGO_ENABLED="1" // 指明cgo工具是否可用的標(biāo)識(shí)

命令公式

CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -o ${name} main.go

  1. name:編譯后app的名稱,默認(rèn)為gomod的包名

  2. os:目標(biāo)os,大致有如下一堆:
    跨平臺(tái)編譯go(交叉編譯)

  3. arch:架構(gòu)

    跨平臺(tái)編譯go(交叉編譯)

舉例

  1. Mac 下編譯 Linux 和 Windows 64位可執(zhí)行程序:

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go?
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
    
  2. Linux 下編譯 Mac 和 Windows 64位可執(zhí)行程序:

    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go?
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
    
  3. Windows 下編譯 Mac 和 Linux 64位可執(zhí)行程序:

    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go?
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
    

提示:如果win命令行提示'CGO_ENABLED' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件。可以用git bash去編譯。

加執(zhí)行權(quán)限,chmod +x web,然后執(zhí)行,訪問(wèn)頁(yè)面。(嫌開放端口之類的麻煩就把防火墻禁掉)
跨平臺(tái)編譯go(交叉編譯)
跨平臺(tái)編譯go(交叉編譯)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-467692.html

到了這里,關(guān)于跨平臺(tái)編譯go(交叉編譯)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【QT+QGIS跨平臺(tái)編譯】之一:【sqlite+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    SQLite是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫(kù)中。它是D.RichardHipp建立的公有領(lǐng)域項(xiàng)目。它的設(shè)計(jì)目標(biāo)是嵌入式的,而且已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它

    2024年01月22日
    瀏覽(96)
  • 【QT+QGIS跨平臺(tái)編譯】之五:【curl+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    【QT+QGIS跨平臺(tái)編譯】之五:【curl+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    (libcurl編譯,依賴OpenSSL、libSSH2等庫(kù)) curl(CommandLine Uniform Resource Locator)主要功能就是用不同的協(xié)議連接和溝通不同的服務(wù)器,相當(dāng)封裝了的socket。 libcurl支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協(xié)議。libcurl同樣支持HTTPS證書授權(quán),HTTP POST, HTTP PUT, FTP 上傳(當(dāng)然你也可

    2024年01月23日
    瀏覽(162)
  • 【QT+QGIS跨平臺(tái)編譯】之八:【zstd+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    【QT+QGIS跨平臺(tái)編譯】之八:【zstd+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    【libzstd跨平臺(tái)編譯】:Windows環(huán)境下編譯成果(支撐QGIS跨平臺(tái)編譯,以及二次研發(fā)) 【libzstd跨平臺(tái)編譯】?

    2024年01月25日
    瀏覽(165)
  • 【QT+QGIS跨平臺(tái)編譯】之三:【OpenSSL+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    OpenSSL是一個(gè)開放源代碼的軟件庫(kù)包,應(yīng)用程序可以使用這個(gè)包來(lái)進(jìn)行安全通信,避免竊聽(tīng),同時(shí)確認(rèn)另一端連接者的身份。這個(gè)包廣泛被應(yīng)用在互聯(lián)網(wǎng)的網(wǎng)頁(yè)服務(wù)器上。 SSL是Secure Sockets Layer(安全套接層協(xié)議)的縮寫,可以在Internet上提供秘密性傳輸。SSL能使用戶/服務(wù)器應(yīng)用

    2024年01月22日
    瀏覽(168)
  • 【QT+QGIS跨平臺(tái)編譯】之三十六:【RasterLite2+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    【QT+QGIS跨平臺(tái)編譯】之三十六:【RasterLite2+Qt跨平臺(tái)編譯】(一套代碼、一套框架,跨平臺(tái)編譯)

    RasterLite2是一個(gè)開源的輕量級(jí)柵格數(shù)據(jù)庫(kù),可以用于存儲(chǔ)和管理各種類型的柵格數(shù)據(jù),包括衛(wèi)星遙感圖像、數(shù)字高程模型等。 與傳統(tǒng)的GIS數(shù)據(jù)存儲(chǔ)方式不同,RasterLite2采用基于SQLite的數(shù)據(jù)庫(kù)引擎,支持快速的數(shù)據(jù)查詢和空間分析操作。同時(shí),由于其輕量級(jí)的設(shè)計(jì),RasterLite2可以

    2024年02月19日
    瀏覽(103)
  • Docker多平臺(tái)、跨平臺(tái)編譯打包

    大多數(shù)帶有Docker官方標(biāo)識(shí)的鏡像都提供了多架構(gòu)支持。如:busybox鏡像支持 amd64 ,? arm32v5 ,? arm32v6 ,? arm32v7 ,? arm64v8 ,? i386 ,? ppc64le , and? s390x。 當(dāng)你在amd64設(shè)備上運(yùn)行容器時(shí),會(huì)拉取amd64鏡像。 當(dāng)你需要構(gòu)建多平臺(tái)鏡像時(shí),可以用 --platform 參數(shù)指定目標(biāo)平臺(tái),但是通常情況下

    2024年02月06日
    瀏覽(25)
  • ffmpeg跨平臺(tái)arm編譯-ubuntu

    32位系統(tǒng): 64位系統(tǒng): 關(guān)鍵選項(xiàng): –arch=arm:指定ARM平臺(tái) –target-os=linux:指定Linux系統(tǒng) –enable-cross-compile :指定交叉編譯 –cross-prefix=arm-linux-gnueabihf-:指定交叉編譯鏈 如果是64位系統(tǒng): –arch=aarch64:指定ARM平臺(tái) –cross-prefix=aarch64-linux-gnu-:指定交叉編譯鏈

    2024年02月08日
    瀏覽(88)
  • rust包跨平臺(tái)編譯,macbook ,linux

    在 MacBook 上編譯 Rust 項(xiàng)目并生成 Linux 包需要一些步驟。以下是一般的步驟概述: 1. **安裝所需工具:** ? ?首先,確保您的 MacBook 上已經(jīng)安裝了所需的工具。您需要 Rust 編程語(yǔ)言的工具鏈以及一些用于交叉編譯到 Linux 的工具。 ? ?- 安裝 Rust 工具鏈:您可以在終端中運(yùn)行以下

    2024年02月12日
    瀏覽(28)
  • Go 跨平臺(tái)GUI框架fyne 中文文檔1 開始

    Go 跨平臺(tái)GUI框架fyne 中文文檔1 開始

    Fyne (go 跨平臺(tái) GUI ) 入門中文文檔1開始 hello word A simple app starts by creating an app instance with app.New() and then opening a window with app.NewWindow(). Then a widget tree is defined that is set as the main content with SetContent() on a window. The app UI is then shown by calling ShowAndRun() on the window. 一個(gè)簡(jiǎn)單的應(yīng)用程序首先

    2024年02月13日
    瀏覽(26)
  • 在Linux、Ubuntu中跨平臺(tái)編譯ARM(AARCH64)平臺(tái)的binutils

    Binutils 是GNU(https://www.gnu.org/)提供的一組二進(jìn)制工具的集合。通常,在已經(jīng)安裝了Linux操作系統(tǒng)的個(gè)人電腦上,系統(tǒng)就已經(jīng)自帶了這個(gè)工具集。但在進(jìn)行嵌入式開發(fā)的時(shí)候,可能會(huì)用到支持ARM64平臺(tái)的Binutils,這時(shí)就需要用到交叉編譯。 此前,在【1】我們已經(jīng)介紹過(guò)Ubuntu中交

    2024年02月05日
    瀏覽(87)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包