亚洲国产日韩人妖另类,久久只有这里有精品热久久,依依成人精品视频在线观看,免费国产午夜视频在线

      
      

        Go語言的跨平臺(tái)能力到底有多強(qiáng)?看完你就知道了

        構(gòu)建方式

        對(duì)比于其他語言程序,Go語言的跨平臺(tái)能力是真的強(qiáng),拿.Net和JAVA來說吧,.Net在.Net core出現(xiàn)之前是不能跨平臺(tái)的,只能在windows上編譯運(yùn)行,即使是.net core出現(xiàn)以后,跨平臺(tái)的程序也是相當(dāng)?shù)穆闊?。而java雖然一直都可以跨平臺(tái),但是運(yùn)行JAVA程序的機(jī)器上也必須要有JAVA程序運(yùn)行環(huán)境JRE。而相對(duì)于Go程序,跨平臺(tái)就簡單的多了,只需要在編譯指定目標(biāo)程序運(yùn)行的架構(gòu)和環(huán)境即可編譯出指定操作系統(tǒng)和架構(gòu)的程序。

        # cpu架構(gòu) go env -w GOARCH=amd64 # 程序運(yùn)行的最終系統(tǒng),linux、windows、darwin(蘋果macos系統(tǒng)) go env -w GOOS=linux # window編譯設(shè)置Cgo模塊關(guān)閉,因?yàn)閣indows上做cgo開發(fā)太麻煩,如果引用了Cgo庫庫,那么請(qǐng)?jiān)趌inux環(huán)境開發(fā)、編譯 go env -w CGO_ENABLED=0 # 編譯出最終可執(zhí)行文件,進(jìn)入根目錄(GinSkeleton所在目錄,也就是 go.mod 所在的目錄) # 編譯時(shí)建議追加參數(shù):-ldflags “-w -s” ,同時(shí)會(huì)壓縮編譯后的體積。 # -w 表示去除調(diào)試信息,禁止gdb調(diào)試, # -s 表示去除符號(hào)表(符號(hào)表在鏈接時(shí)起著按符號(hào)尋址的作用,靜態(tài)編譯后用不到) # 追加參數(shù)編譯后的程序體積也會(huì)比原來減少25%左右. # -trimpath 表示去除絕對(duì)路徑信息,只保留基于 go.mod 開始的相對(duì)路徑信息 # web|api|cli 三個(gè)目錄選擇其一即可,表示編譯的入口目錄 go build -o demo -ldflags “-w -s” -trimpath cmd/(web|api|cli)/main.go

        以上是指定了go的環(huán)境變量后執(zhí)行的go build命令進(jìn)行目標(biāo)程序的構(gòu)建,這種方式會(huì)一直生效的,如果不讓他一直生效,可以在構(gòu)建的時(shí)候臨時(shí)指定環(huán)境變量,下面以window的環(huán)境為例,來介紹臨時(shí)指定環(huán)境變量的方式構(gòu)建可以在Linux環(huán)境下運(yùn)行的可執(zhí)行程序:

        set GOARCH=amd64set GOOS=linux set CGO_ENABLED=0#在go程序的根目錄執(zhí)行構(gòu)建命令go build -o demo .

        可以根據(jù)不同的架構(gòu)和操作系統(tǒng)將其編寫為不同的.bat的可執(zhí)行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫成腳本文件放置在程序的根目錄,這樣在構(gòu)建的時(shí)候就不用再敲命令了,直接運(yùn)行腳本就可以了。

        運(yùn)行方式

        Java程序編譯打包后為war包或者是java包,必須執(zhí)行java -jar 命令或者將其放置到tomcat的指定目錄下,運(yùn)行tomcat程序。而Go語言編寫的程序最終為可執(zhí)行的文件(window下編譯出的是.exe的可執(zhí)行文件),只需要將其賦予可執(zhí)行的權(quán)限就可以直接運(yùn)行了。

        容器方式

        構(gòu)建JAVA程序的鏡像需要指定java的基礎(chǔ)鏡像,否則就需要在鏡像中安裝java的運(yùn)行環(huán)境了,下面展示的是構(gòu)建的一個(gè)JAVA程序的鏡像,構(gòu)建出來鏡像的體積相對(duì)比較大

        #docker run -itd –name eladmin -p 8000:8000 -v f:/docker/eladmin/config/:/usr/local/config/ -v f:/docker/eladmin/file:/home/eladmin/file -v f:/docker/eladmin/avatar:/home/eladmin/avatar eladmin:v1# 基礎(chǔ)鏡像使用javaFROM java:8# 作者M(jìn)AINTAINER limingqi # VOLUME 指定了臨時(shí)文件目錄為/tmp。# 其效果是在主機(jī) /var/lib/docker 目錄下創(chuàng)建了一個(gè)臨時(shí)文件,并鏈接到容器的/tmp#VOLUME /tmp# 將jar包添加到容器中并更名為app.jar#ADD demo-0.0.1-SNAPSHOT.jar app.jarWORKDIR /usr/localARG JAR_FILE=eladmin-system/target/eladmin-system-1.0.jarCOPY ${JAR_FILE} app.jarCOPY eladmin-system/src/main/resources/config/ config/EXPOSE 8000# 運(yùn)行jar包RUN bash -c ‘touch app.jar’ENTRYPOINT [“java”,”-Djava.security.egd=file:/dev/./urandom”,”-jar”,”app.jar”]

        而Go程序制作出的鏡像就不需要安裝任何的依賴環(huán)境,因?yàn)樗诖虬臅r(shí)候就已經(jīng)將依賴的包一塊打包到一起了

        # 指定基礎(chǔ)鏡像FROM busybox#指定工作目錄WORKDIR /demo# copy可執(zhí)行文件demo到工作目錄COPY demo .#授權(quán)RUN chmod +x demo#對(duì)外暴露端口EXPOSE 8080# 執(zhí)行 可執(zhí)行文件。CMD [“./demo”]

        拿著這個(gè)鏡像就可以到處運(yùn)行了。

        通過對(duì)比我們可以發(fā)現(xiàn),如果沒有之前的技術(shù)和業(yè)務(wù)的積累,重新開發(fā)一個(gè)新的項(xiàng)目,使用go去開發(fā)無疑是最容易上手的,所以現(xiàn)在很多公司都使用go進(jìn)行開發(fā),也逐漸將其他語言的項(xiàng)目逐步的用go語言進(jìn)行改造。其實(shí)用什么語言不重要,合適的才重要,開發(fā)項(xiàng)目在選擇語言的時(shí)候也會(huì)綜合多方面來考慮選擇合適的語言和架構(gòu),畢竟很多公司都不是搞研究的,都需要項(xiàng)目來賺錢,所以開發(fā)的速度、客戶的滿意度、項(xiàng)目交付的時(shí)間才是驅(qū)動(dòng)公司技術(shù)的主要因素。

        我們個(gè)人也應(yīng)該不斷完善自己的技術(shù)棧,不應(yīng)該太依靠某種語言,最重要的還是自己的架構(gòu)思想和底層架構(gòu)知識(shí),只有掌握了這些才能夠不被社會(huì)和公司“優(yōu)化”。

        鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
        上一篇 2022年7月11日 18:42
        下一篇 2022年7月11日 18:43

        相關(guān)推薦

        聯(lián)系我們

        聯(lián)系郵箱:admin#wlmqw.com
        工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息