這篇文章主要介紹了關(guān)于Go的入門(mén)知識(shí),具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

最近,我開(kāi)始為我的工作團(tuán)隊(duì)開(kāi)發(fā)內(nèi)部命令行界面應(yīng)用程序。我選擇的主要編程語(yǔ)言是PHP,但是我想用可以在任何平臺(tái)上運(yùn)行的語(yǔ)言創(chuàng)建該程序,而不必安裝解釋器。我還希望該應(yīng)用程序可以獨(dú)立包含在一個(gè)二進(jìn)制文件中,以便于分發(fā)和安裝。我下載了Go,對(duì)它的易學(xué)性和在短時(shí)間內(nèi)獲得的生產(chǎn)力感到驚訝。 Go的程序化編程模型真的很適合我們PHP開(kāi)發(fā)者的思維習(xí)慣,我得以快速啟動(dòng)并運(yùn)行該應(yīng)用程序。盡管與PHP有一些明顯的區(qū)別,所以我想與想要學(xué)習(xí)Go的其他PHP開(kāi)發(fā)人員分享這些區(qū)別。
MacOS
我使用的是 Mac ,所以通過(guò) Homebrew 安裝 go : brew install go 。如果你的 Mac 還沒(méi)有安裝 Homebrew ,我強(qiáng)烈建議你使用。
Windows & Linux
Go 的官網(wǎng)有每種操作系統(tǒng)的下載資源,包括針對(duì) Windows 系統(tǒng)的「下一步下一步」的安裝器。
開(kāi)始
在 Go 里面,所有工程的源代碼都保存在一個(gè)目錄:GOPATH。 GOPATH 默認(rèn)被設(shè)置成家目錄下的 go 下面,比如 /Users/andrewdavis/go。GOPATH 下面有 bin 目錄和 src 目錄。bin 目錄存放你下載的二進(jìn)制形式的依賴(lài) ,你可以將 bin 目錄添加到你的 PATH 環(huán)境變量里面。你可以在終端編輯文件 .bashrc/.zshrc ,添加 export PATH=$PATH:$(go env GOPATH)/bin。學(xué)習(xí) Golang , 你可以在終端運(yùn)行命令 go get golang.org/x/tour/gotour 下載 Go編程指南, go get 將下載參數(shù)里面指定的第三方依賴(lài)的源碼和二進(jìn)制文件。 現(xiàn)在你可以在終端運(yùn)行 gotour , 它將啟動(dòng)一個(gè) web 服務(wù)器,并自動(dòng)打開(kāi)瀏覽器訪問(wèn)。
要?jiǎng)?chuàng)建項(xiàng)目,請(qǐng)?jiān)贕OPATH中的src下創(chuàng)建一個(gè)目錄:mkdir -p $GOPATH/src/helloworld。打開(kāi)這個(gè)文件夾cd $GOPATH/src/helloworld并創(chuàng)建一個(gè)名為main,touch main.go。在該文件中,輸入以下內(nèi)容:
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}所有Go程序的起點(diǎn)是主程序包中的主要功能。接下來(lái),你可以跑go run main.go運(yùn)行程序。您還可以運(yùn)行go install,程序?qū)⒈痪幾g并放在bin目錄中,這樣您就可以在終端中執(zhí)行helloworld,它將運(yùn)行您的代碼。
與PHP的主要區(qū)別
現(xiàn)在您已經(jīng)設(shè)置了一個(gè)項(xiàng)目,您可以開(kāi)始探索不同的go功能。你會(huì)注意到的第一件事是Go中不需要分號(hào)。語(yǔ)句的結(jié)尾由新行檢測(cè)。這里還有一些我花了一些時(shí)間才理解的差異:
變量
Go 是一門(mén)靜態(tài)和強(qiáng)類(lèi)型語(yǔ)言, 因此每個(gè)變量都有分配給它的類(lèi)型。函數(shù)中的變量是使用 := 賦值的, 該運(yùn)算符將為變量自動(dòng)分配類(lèi)型: name := "Andrew" // name 現(xiàn)在是一個(gè)字符串. 要?jiǎng)?chuàng)建一個(gè)不設(shè)置任何數(shù)據(jù)的變量或者在函數(shù)之外創(chuàng)建變量,您必須使用 var 關(guān)鍵字: var name string。
If 語(yǔ)句
if語(yǔ)句的工作方式和PHP中是相同的, 但是它不需要用括號(hào)包住判斷條件. 這種差異最初讓我在閱讀 Go 的代碼時(shí)感到困惑. 但是, 我認(rèn)為這讓代碼更具可讀性.
package main
import "fmt"
func main() {
value := false
if value {
fmt.Println("Value is true")
} else {
fmt.Println("Value is false")
}
}Packages vs Namespaces
Go 使用術(shù)語(yǔ) package 來(lái)為其內(nèi)容創(chuàng)建命名空間。如果你的 Go 代碼中有一個(gè)名為 controllers 的文件夾,在這個(gè)文件夾下的所有文件都需要以 package controllers 開(kāi)頭。想要在其他包內(nèi)導(dǎo)入控制器,你需要使用 import "helloworld/controllers"。包內(nèi)任何以大寫(xiě)字母開(kāi)頭的名稱(chēng)都可以用在其他包中。 如果在 controllers 中有一個(gè)名為func HelloWorld () 的函數(shù),你可以在 controllers 導(dǎo)入之后使用 controllers.HelloWorld() 來(lái)執(zhí)行這個(gè)函數(shù)。任何以小寫(xiě)字母開(kāi)頭的名稱(chēng)只能在包內(nèi)使用。不需要 private 或 public 進(jìn)行聲明。
Strings
在 Go 中,所有字符串必須用雙引號(hào)包圍。Go 中的一個(gè)單引號(hào)值代表一個(gè) rune (一個(gè) Unicode字符)。習(xí)慣性的,我會(huì)使用單引號(hào)聲明字符串,因?yàn)檫@是 PHP 中的常見(jiàn)做法。使用雙引號(hào)聲明字符串會(huì)需要一段時(shí)間調(diào)整。
var name = "Andrew" var copy = '?'
Structs vs Classes
Go 沒(méi)有像 PHP 的 class 語(yǔ)法. 取而代之的, 它使用結(jié)構(gòu)體對(duì)自定義數(shù)據(jù)結(jié)構(gòu)建模. 你可以像下面這樣聲明一個(gè)結(jié)構(gòu)體:
package main
type Cup struct {
name string
color string
volume int
}你可以通過(guò)在函數(shù)名稱(chēng)之前引用結(jié)構(gòu)體來(lái)為該結(jié)構(gòu)體添加方法。
func (c Cup) nameAndColor() string {
return c.name + ": " + c.color
}然后您可以通過(guò)在結(jié)構(gòu)體名稱(chēng)后用大括號(hào)傳遞其初始值來(lái)實(shí)例化一個(gè)結(jié)構(gòu)體. 使用 . 來(lái)調(diào)用結(jié)構(gòu)體的方法.
func main() {
c := Cup{name: "Solo", color: "Red", volume: 12}
c.nameAndColor() // 返回 "Solo: Red"
}若要?jiǎng)?chuàng)建一個(gè)方法修改結(jié)構(gòu)體實(shí)例, 該方法必須引用指向結(jié)構(gòu)體的指針:
func (c *Cup) crush() {
c.volume = 0
}錯(cuò)誤
在 Go 中,錯(cuò)誤并不會(huì)視為異常。沒(méi)有 try 或 catch 的機(jī)制。作為替代,如果發(fā)生錯(cuò)誤,需要從函數(shù)內(nèi)返回錯(cuò)誤。Go 支持一個(gè)函數(shù)返回多個(gè)值。如果調(diào)用的函數(shù)可能會(huì)返回錯(cuò)誤,你必須檢測(cè)這個(gè)錯(cuò)誤是否存在,然后處理這個(gè)錯(cuò)誤。
package main
import "fmt"
func GetName(name string) (string, error) {
if name == "Bob" {
return "", fmt.Errorf("Name cannot be Bob")
}
return name, nil
}
func main() {
name, err := GetName("Bob")
if err != nil {
fmt.Println("Uh-oh an error has occurred")
}
}Final
當(dāng)然,Go 還有很多東西要學(xué),但是希望這能幫助你更好的開(kāi)始。學(xué)習(xí) Go 的很好的資源有很多。對(duì)我最有幫助的是 Go 文檔 和 Go By Example。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享關(guān)于Go的入門(mén)知識(shí)內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!
當(dāng)前名稱(chēng):關(guān)于Go的入門(mén)知識(shí)-創(chuàng)新互聯(lián)
分享鏈接:http://chinadenli.net/article38/cocpsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司、做網(wǎng)站、企業(yè)建站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容