對(duì)比于其他語(yǔ)言的程序,Go語(yǔ)言的跨平臺(tái)能力是真的強(qiáng),拿.Net和JAVA來(lái)說(shuō)吧,.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)就簡(jiǎn)單的多了,只需要在編譯指定目標(biāo)程序運(yùn)行的架構(gòu)和環(huán)境即可編譯出指定操作系統(tǒng)和架構(gòu)的程序。
創(chuàng)新互聯(lián)于2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元臺(tái)安做網(wǎng)站,已為上家服務(wù),為臺(tái)安各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
以上是指定了go的環(huán)境變量后執(zhí)行的go build命令進(jìn)行目標(biāo)程序的構(gòu)建,這種方式會(huì)一直生效的,如果不讓他一直生效,可以在構(gòu)建的時(shí)候臨時(shí)指定環(huán)境變量,下面以window的環(huán)境為例,來(lái)介紹臨時(shí)指定環(huán)境變量的方式構(gòu)建可以在Linux環(huán)境下運(yùn)行的可執(zhí)行程序:
可以根據(jù)不同的架構(gòu)和操作系統(tǒng)將其編寫(xiě)為不同的.bat的可執(zhí)行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫(xiě)成腳本文件放置在程序的根目錄,這樣在構(gòu)建的時(shí)候就不用再敲命令了,直接運(yùn)行腳本就可以了。
Java程序編譯打包后為war包或者是java包,必須執(zhí)行java -jar 命令或者將其放置到tomcat的指定目錄下,運(yùn)行tomcat程序。而Go語(yǔ)言編寫(xiě)的程序最終為可執(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)建出來(lái)鏡像的體積相對(duì)比較大
而Go程序制作出的鏡像就不需要安裝任何的依賴環(huán)境,因?yàn)樗诖虬臅r(shí)候就已經(jīng)將依賴的包一塊打包到一起了
拿著這個(gè)鏡像就可以到處運(yùn)行了。
通過(guò)對(duì)比我們可以發(fā)現(xiàn),如果沒(méi)有之前的技術(shù)和業(yè)務(wù)的積累,重新開(kāi)發(fā)一個(gè)新的項(xiàng)目,使用go去開(kāi)發(fā)無(wú)疑是最容易上手的,所以現(xiàn)在很多公司都使用go進(jìn)行開(kāi)發(fā),也逐漸將其他語(yǔ)言的項(xiàng)目逐步的用go語(yǔ)言進(jìn)行改造。其實(shí)用什么語(yǔ)言不重要,合適的才重要,開(kāi)發(fā)項(xiàng)目在選擇語(yǔ)言的時(shí)候也會(huì)綜合多方面來(lái)考慮選擇合適的語(yǔ)言和架構(gòu),畢竟很多公司都不是搞研究的,都需要項(xiàng)目來(lái)賺錢(qián),所以開(kāi)發(fā)的速度、客戶的滿意度、項(xiàng)目交付的時(shí)間才是驅(qū)動(dòng)公司技術(shù)的主要因素。
我們個(gè)人也應(yīng)該不斷完善自己的技術(shù)棧,不應(yīng)該太依靠某種語(yǔ)言,最重要的還是自己的架構(gòu)思想和底層架構(gòu)知識(shí),只有掌握了這些才能夠不被 社會(huì) 和公司“優(yōu)化”。
應(yīng)用程序發(fā)生異常 未知的軟件異常
1.病毒木馬造成的,在當(dāng)今互聯(lián)網(wǎng)時(shí)代,病毒坐著為了獲得更多的牟利,常用病毒綁架應(yīng)用程序和系統(tǒng)文件,然后某些安全殺毒軟件把被病毒木馬感染的應(yīng)用程序和系統(tǒng)文件當(dāng)病毒殺了導(dǎo)致的。
2.應(yīng)用程序組件丟失,應(yīng)用程序完整的運(yùn)行需要一些系統(tǒng)文件或者某些ll文件支持的,如果應(yīng)用程序組件不完整也會(huì)導(dǎo)致的。
3.系統(tǒng)文件損壞或丟失,盜版系統(tǒng)或Ghost版本系統(tǒng),很容易出現(xiàn)該問(wèn)題。
4.操作系統(tǒng)自身的問(wèn)題,操作系統(tǒng)本身也會(huì)有bug 。
5.硬件問(wèn)題,例如內(nèi)存條壞了或者存在質(zhì)量問(wèn)題,或者內(nèi)存條的金手指的灰塵特別多。
應(yīng)用程序發(fā)生異常怎么辦
1.檢查電腦是否存在病毒,請(qǐng)使用百度衛(wèi)士進(jìn)行木馬查殺。
2.系統(tǒng)文件損壞或丟失,盜版系統(tǒng)或Ghost版本系統(tǒng),很容易出現(xiàn)該問(wèn)題。建議:使用完整版或正版系統(tǒng)。
3.安裝的軟件與系統(tǒng)或其它軟件發(fā)生沖突,找到發(fā)生沖突的軟件,卸載它。如果更新下載補(bǔ)丁不是該軟件的錯(cuò)誤補(bǔ)丁,也會(huì)引起軟件異常,解決辦法:卸載該軟件,重新下載重新安裝試試。順便檢查開(kāi)機(jī)啟動(dòng)項(xiàng),把沒(méi)必要啟動(dòng)的啟動(dòng)項(xiàng)禁止開(kāi)機(jī)啟動(dòng)。
4.如果檢查上面的都沒(méi)問(wèn)題,可以試試下面的方法。
打開(kāi)開(kāi)始菜單→運(yùn)行→輸入cmd→回車(chē),在命令提示符下輸入下面命令 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回車(chē)。
完成后,在輸入下面
for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回車(chē)。
如果怕輸入錯(cuò)誤,可以復(fù)制這兩條指令,然后在命令提示符后擊鼠標(biāo)右鍵,打“粘貼”,回車(chē),耐心等待,直到屏幕滾動(dòng)停止為止。(重啟電腦)。
1、解壓壓縮包到go工作目錄,如解壓到E:\opensource\go\go,解壓后的目錄結(jié)構(gòu)如下:
E:\opensource\go\go
├─api
├─bin
│ ├─go.exe
│ ├─godoc.exe
│ └─gofmt.exe
├─doc
├─include
├─lib
├─misc
├─pkg
├─src
└─test
2、增加環(huán)境變量GOROOT,取值為上面的go工作目錄
3、Path環(huán)境變量中添加";%GOROOT%\bin",以便能夠直接調(diào)用go命令來(lái)編譯go代碼,至此go編譯環(huán)境就配置好了
注:如果不想手動(dòng)設(shè)置系統(tǒng)環(huán)境變量,也可下載go啟動(dòng)環(huán)境批處理附件,
修改goenv.bat文件中的GOROOT值為上面的go工作目錄后直接雙擊該bat文件,go編譯環(huán)境變量即設(shè)置完成。
4、測(cè)試go編譯環(huán)境,啟動(dòng)一個(gè)cmd窗口,直接輸入go,看到下面的提示就是搭建成功了
E:\opensource\go\gogo
Go is a tool for managing Go source code.
Usage:
go command [arguments]
The commands are:
build compile packages and dependencies
clean remove object files
doc run godoc on package sources
env print Go environment information
fix run go tool fix on packages
fmt run gofmt on package sources
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages
Use "go help [command]" for more information about a command.
Additional help topics:
gopath GOPATH environment variable
packages description of package lists
remote remote import path syntax
testflag description of testing flags
testfunc description of testing functions
Use "go help [topic]" for more information about that topic.
5、編譯helloworld測(cè)試程序,go語(yǔ)言包中test目錄帶有helloworld.go測(cè)試程序,源碼見(jiàn)"附一 helloworld.go",
直接調(diào)用"go build helloworld.go"就生成了"helloworld.exe"可執(zhí)行程序,運(yùn)行一下這個(gè)程序看到了我們期望的hello,wolrd。
E:\opensource\go\go\testgo build helloworld.go
E:\opensource\go\go\testhelloworld.exe
hello, world
E:\opensource\go\go\test
附一 helloworld.go
// cmpout
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test that we can do page 1 of the C book.
package main
func main() {
print("hello, world\n")
}
你在編譯器里面build一下,然后去\bin\debug目錄下找.exeexe就是可執(zhí)行文件了。運(yùn)行的時(shí)候可能需要用到debug目錄下的其他文件(如配置文件、dll等),所以需要把debug下的所有文件都放到一起。
類型 在變量名后邊
也可不顯式聲明類型, 類型推斷, 但是是靜態(tài)語(yǔ)言, name一開(kāi)始放字符串就不能再賦值數(shù)字
方法,屬性 分開(kāi) 方法名首字母大寫(xiě)就是就是外部可調(diào)的
面向?qū)ο笤O(shè)計(jì)的一個(gè)重要原則:“優(yōu)先使用組合而不是繼承”
Dog 也是Animal , 要復(fù)用Animal 的屬性和方法,
只需要在結(jié)構(gòu)體 type 里面寫(xiě) Animal
入口也是main, 用用試試
多態(tài), 有這個(gè)方法就是這個(gè)接口的實(shí)現(xiàn), 具體的類 不需要知道自己實(shí)現(xiàn)了什么接口,
使用: 在一個(gè)函數(shù)調(diào)用之前加上關(guān)鍵字go 就啟動(dòng)了一個(gè)goroutine
創(chuàng)建一個(gè)goroutine,它會(huì)被加入到一個(gè)全局的運(yùn)行隊(duì)列當(dāng)中,
調(diào)度器 會(huì)把他們分配給某個(gè) 邏輯處理器 的隊(duì)列,
一個(gè)邏輯處理器 綁定到一個(gè) 操作系統(tǒng)線程 ,在上面運(yùn)行g(shù)oroutine,
如果goroutine需要讀寫(xiě)文件, 阻塞 ,就脫離邏輯處理器 直接 goroutine - 系統(tǒng)線程 綁定
編譯成同名.exe 來(lái)執(zhí)行, 不通過(guò)虛擬機(jī), 直接是機(jī)器碼, 和C 一樣, 所以非???/p>
但是也有自動(dòng)垃圾回收,每個(gè)exe文件當(dāng)中已經(jīng)包含了一個(gè)類似于虛擬機(jī)的runtime,進(jìn)行g(shù)oroutine的調(diào)度
默認(rèn)是靜態(tài)鏈接的,那個(gè)exe會(huì)把運(yùn)行時(shí)所需要的所有東西都加進(jìn)去,這樣就可以把exe復(fù)制到任何地方去運(yùn)行了, 因此 生成的 .exe 文件非常大