介紹
什么是Golang
Go也被稱為Golang,它是由谷歌創(chuàng)建的一種開源、編譯和靜態(tài)類型的編程語(yǔ)言。
Golang的主要目標(biāo)是使高可用性和可伸縮的web應(yīng)用程序的開發(fā)變得簡(jiǎn)單易行。
為什么選擇Golang
當(dāng)有很多其他語(yǔ)言(如python、ruby、node.js)時(shí),為什么選擇Golang作為服務(wù)端編程語(yǔ)言呢?
并發(fā)是語(yǔ)言的一個(gè)固有部分。因此編寫多線程程序是小菜一碟。這是通過(guò)Goroutines和channel實(shí)現(xiàn)的,我們將在后面的教程中討論。
Golang是一種編譯語(yǔ)言。源代碼編譯成原生二進(jìn)制。這在解釋語(yǔ)言(如nodejs中使用的JavaScript)中丟失了。
語(yǔ)言規(guī)范非常簡(jiǎn)單。整個(gè)規(guī)范適合于一個(gè)頁(yè)面,您甚至可以使用它來(lái)編寫自己的編譯器:)
go編譯器支持靜態(tài)鏈接。所有的go代碼都可以靜態(tài)地鏈接到一個(gè)大的fat二進(jìn)制文件中,并且可以輕松地部署到云服務(wù)器中,而不用擔(dān)心依賴關(guān)系。
安裝
在Mac、Windows和Linux三個(gè)平臺(tái)上都支持Golang。您可以從https://golang.org/dl/下載相應(yīng)平臺(tái)的二進(jìn)制文件。
mac系統(tǒng)安裝并配置
安裝
雙擊 pkg 包,順著指引,即可安裝成功。 在命令行輸入 go version,獲取到 go 的version,則代表安裝成功。
配置環(huán)境變量
- 打開終端輸入
cd ~進(jìn)入用戶主目錄; - 輸入
ls -all命令查看是否存在.bash_profile; - 存在既使用
vim .bash_profile打開文件; - 輸入
i進(jìn)入vim編輯模式; - 輸入下面代碼, 其中
GOPATH:日常開發(fā)的根目錄。GOBIN:是GOPATH下的bin目錄。
export GOPATH=/Users/yourname/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
- 點(diǎn)擊
ESC,并輸入:wq保存并退出編輯。可輸入vim .bash_profile查看是否保存成功。 - 輸入
source ~/.bash_profile完成對(duì)golang環(huán)境變量的配置,配置成功沒(méi)有提示。 - 輸入
go env查看配置結(jié)果。
搭建開發(fā)工具
安裝好atom工具,然后安裝go-plus插件和atom-terminal-panel插件。
安裝go-plus插件
右上角Atom---preferences

安裝atom-terminal-panel插件

第一個(gè)程序:HelloWorld
編寫
打開編輯器創(chuàng)建一個(gè)新的helloworld.go文件,并輸入以下內(nèi)容:
package main
import "fmt"
func main() {
/* 輸出 */
fmt.Println("Hello, World!")
}
執(zhí)行g(shù)o程序
打開命令行提示符,進(jìn)入helloworld.go所在的目錄,輸入go run helloworld.go命令并觀察運(yùn)行結(jié)果。
yuyangdeMacBook-Pro:~ yuyang$ cd /Users/yuyang/go/study
yuyangdeMacBook-Pro:study yuyang$ go run helloworld.go
Hello,World!
解釋說(shuō)明
package
- 在同一個(gè)包下面的文件屬于同一個(gè)工程文件,不用
import包,可以直接使用 - 在同一個(gè)包下面的所有文件的
package名,都是一樣的 - 在同一個(gè)包下面的文件
package名都建議設(shè)為是該目錄名,但也可以不是
import
import “fmt” 告訴 Go 編譯器這個(gè)程序需要使用 fmt 包的函數(shù),fmt 包實(shí)現(xiàn)了格式化 IO(輸入/輸出)的函數(shù)。
可以是相對(duì)路徑也可以是絕對(duì)路徑,推薦使用絕對(duì)路徑(起始于工程根目錄)。
- 點(diǎn)操作。我們有時(shí)候會(huì)看到如下的方式導(dǎo)入包
import(
. "fmt"
)
這個(gè)點(diǎn)操作的含義就是這個(gè)包導(dǎo)入之后在你調(diào)用這個(gè)包的函數(shù)時(shí),你可以省略前綴的包名,也就是前面你調(diào)用的fmt.Println("hello world")可以省略的寫成Println("hello world")。
- 別名操作。別名操作顧名思義我們可以把包命名成另一個(gè)我們用起來(lái)容易記憶的名字
import(
f "fmt"
)
別名操作的話調(diào)用包函數(shù)時(shí)前綴變成了我們的前綴,即f.Println("hello world")。
-
_操作。這個(gè)操作經(jīng)常是讓很多人費(fèi)解的一個(gè)操作符,請(qǐng)看下面這個(gè)import
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
_操作其實(shí)是引入該包,而不直接使用包里面的函數(shù),而是調(diào)用了該包里面的init函數(shù)。
main與init
- 這兩個(gè)函數(shù)在定義時(shí)不能有任何的參數(shù)和返回值
- 雖然一個(gè)
package里面可以寫任意多個(gè)init函數(shù),但推薦只用一個(gè) - Go程序會(huì)自動(dòng)調(diào)用
init()和main() - 每個(gè)
package中的init函數(shù)都是可選的,但package main就必須包含一個(gè)main函數(shù) - 先調(diào)用
init函數(shù),再調(diào)用main函數(shù) - 運(yùn)行程序,必須要運(yùn)行存在
main函數(shù)的go文件
初始化順序
程序的初始化和執(zhí)行都起始于main包。如果main包還導(dǎo)入了其它的包,那么就會(huì)在編譯時(shí)將它們依次導(dǎo)入。有時(shí)一個(gè)包會(huì)被多個(gè)包同時(shí)導(dǎo)入,那么它只會(huì)被導(dǎo)入一次(例如很多包可能都會(huì)用到fmt包,但它只會(huì)被導(dǎo)入一次,因?yàn)闆](méi)有必要導(dǎo)入多次)。當(dāng)一個(gè)包被導(dǎo)入時(shí),如果該包還導(dǎo)入了其它的包,那么會(huì)先將其它包導(dǎo)入進(jìn)來(lái),然后再對(duì)這些包中的包級(jí)常量和變量進(jìn)行初始化,接著執(zhí)行init函數(shù)(如果有的話),依次類推。等所有被導(dǎo)入的包都加載完畢了,就會(huì)開始對(duì)main包中的包級(jí)常量和變量進(jìn)行初始化,然后執(zhí)行main包中的init函數(shù)(如果存在的話),最后執(zhí)行main函數(shù)。
編碼規(guī)范
注釋
單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋
多行注釋也叫塊注釋,均已以 /* 開頭,并以 */ 結(jié)尾,且不可以嵌套使用,多行注釋一般用于包的文檔描述或注釋成塊的代碼片段
標(biāo)識(shí)符
當(dāng)標(biāo)識(shí)符(包括常量、變量、類型、函數(shù)名、結(jié)構(gòu)字段等等)以一個(gè)大寫字母開頭,如:Group1,那么使用這種形式的標(biāo)識(shí)符的對(duì)象就可以被外部包的代碼所使用(客戶端程序需要先導(dǎo)入這個(gè)包),這被稱為導(dǎo)出(像面向?qū)ο笳Z(yǔ)言中的 public);標(biāo)識(shí)符如果以小寫字母開頭,則對(duì)包外是不可見的,但是他們?cè)谡麄€(gè)包的內(nèi)部是可見并且可用的(像面向?qū)ο笳Z(yǔ)言中的 private )。
語(yǔ)句的結(jié)尾
Go語(yǔ)言中是不需要類似于Java需要冒號(hào)結(jié)尾,默認(rèn)一行就是一條數(shù)據(jù)
如果你打算將多個(gè)語(yǔ)句寫在同一行,它們則必須使用
;
原文:第1章-簡(jiǎn)介和配置
作者:黎躍春