天天看點

Golang開發入門(一)

GO語言簡介

Golang開發入門(一)

Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜态強類型、編譯型語言。Go 語言文法與 C 相近,但功能上有:記憶體安全,GC(垃圾回收),結構形态及 CSP-style 并發計算。

與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數等功能,但增加了切片(Slice) 型、并發、管道、垃圾回收、接口(Interface)等特性的語言級支援。Go 2.0版本将支援泛型。

Golang開發入門(一)

Go環境搭建

Golang開發入門(一)

1、要搭建Go語言開發環境,我們第一步要下載下傳go的開發工具包

安裝包下載下傳位址為:​​golang.org/dl/​​

如果打不開可以使用這個位址:

​​golang.google.cn/dl/​​

Golang開發入門(一)

打開之後根據自己的作業系統下載下傳對應版本的安裝包。開發工具包又分為安裝版和壓縮版,安裝版的工具包輕按兩下打開會出現安裝向導,選擇安裝的路徑,會自動設定好環境變量等資訊,用起來比較友善一些。這裡選擇安裝版的工具包進行安裝。

2、安裝Go

①.輕按兩下運作安裝檔案,然後設定安裝目錄,點選開始安裝就可以了。使用安裝版的工具包安裝完成後會自動添加好GOPATH的環境變量,如果是使用壓縮版安裝的需要手動添加GOPATH(剛剛安裝的go路徑)環境變量,并且在PATH變量中添加;%USERPROFILE%\go\bin。

②.打開終端,輸入 go version 指令,顯示出目前go的版本就是安裝成功了。

③.安裝好go環境之後,就可以在指令行使用 go run 指令運作go腳本了。

Golang開發入門(一)

GO重點文法

Golang開發入門(一)

1、切片(Slice)

Go 語言切片是對數組的一種抽象

Go 數組的長度是不可以改變的,在特定場景中這樣的集合就不太适用,Go中提供了一種靈活,功能強悍的内置類型切片("動态數組"),與數組相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。

可以聲明一個未指定大小的數組來定義切片:var identifier []type,或使用make()函數來建立切片:var slice1 []type = make([]type, len);也可以指定容量,其中capacity為可選參數。make([]T, length,capacity)。

直接初始化切片,s :=[] int {1,2,3 },[]表示是切片類型,{1,2,3}初始化值依次是1,2,3.其cap=len=3。

初始化切片s,是數組arr的引用,s := arr[startIndex:endIndex],将arr中從下标startIndex到endIndex-1 下的元素建立為一個新的切片。s := arr[startIndex:] ,預設endIndex時将表示一直到arr的最後一個元素。s:= arr[:endIndex] ,預設startIndex時将表示從arr的第一個元素開始。

切片是可索引的,并且可以由len() 方法擷取長度。由 cap() 方法可以測量切片最長可以達到多少。

2、指針

Go 語言的取位址符是&,放到一個變量前使用就會傳回相應變量的記憶體位址。一個指針變量指向了一個值的記憶體位址。

varvar_name*var-type      

var-type 為指針類型,var_name為指針變量名,* 号用于指定變量是作為一個指針。以下是有效的指針聲明:

varip*int        /* 指向整型*/
varfp*float32    /* 指向浮點型 */      

首先,定義一個指針變量;然後,為指針變量指派;指派之後就可以通路指針變量中指向位址的值。

func main() {
var a int= 20     /* 聲明實際變量 */
varip *int        /* 聲明指針變量 */
ip = &a           /* 指針變量的存儲位址 */
fmt.Printf("a 變量的位址是: %x\n", &a  )
 /* 指針變量的存儲位址 */
fmt.Printf("ip變量儲存的指針位址: %x\n", ip )
/* 使用指針通路值 */
fmt.Printf("*ip變量的值: %d\n", *ip )
}      

當一個指針被定義後沒有配置設定到任何變量時,它的值為 nil。nil 指針也稱為空指針。

nil在概念上和其它語言的null、None、nil、NULL一樣,都指代零值或空值。

func main() {
varptr *int
fmt.Printf("ptr的值為 : %x\n", ptr  )
}      

3、管道

管道(Channel)是Go語言中比較重要的部分,經常在Go中的并發中使用。

①.管道的定義

varchanNamechanElemType,這裡ElemType是指此管道所傳遞的類型。也可以使用make()方法來定義管道,ch := make(chanint, 100),size可以省略

②.管道的一些操作

<-操作符可以由管道中讀寫資料,需要注意,<-操作符是與最左邊的chan優先結合的。

向管道中寫入一個資料,在此需要注意:向管道中寫入資料通常會導緻程式阻塞,直到有其他goroutine從這個管道中讀取資料。

讀取資料時,需要注意:如果管道中沒有資料,那麼從管道中讀取資料會導緻程式阻塞,直到有資料。

關閉channel,直接調用close()即可, close(ch)。

判斷ch是否關閉可以使用,x, ok := <-ch,判斷ok的值,如果是false,則說明已經關閉(關閉的話讀取是不會阻塞的)。

var ch1 chan<- float64     // 隻能向裡面寫入float64的資料,不能讀取
var ch2 <-chanint          // 隻能讀取int型資料      
Golang開發入門(一)

常用GO web架構

Golang開發入門(一)

1

Beego

beego 是一個開源的Go應用HTTP 架構,他可以用來快速開發API、Web以及後端服務等各種應用。是一個完整的MVC架構,有自己的日志庫、ORM和Web架構。你不需要再去安裝第三方庫。它有一個稱為Bee Tool的内置工具,用于監視代碼更改,并在檢測到更改時運作任務。

2

Iris

Iris号稱是最快的Go後端web架構。支援http2,完備的MVC 支援。性能非常卓越,在衆多web架構中遙遙領先。另外iris提供的api都是極簡風格,很容易上手。支援中間件擴充,擁有豐富的中間件生态庫。擁有強大的路由功能,可以輕易的建構各種形式的RESTful API,路由分組、靜态路由、動态路徑參數化、通配符路由等待。還有http錯誤定義、上下文處理器、身份驗證、視圖模闆、熱重新開機、Websocket支援等等功能。

3

Buffalo

Buffalo是一個快速又簡單的web架構。當你開始一個新項目時,Buffalo可以為你提供一切——從前端到後端開發。Buffalo不僅僅是一個架構——它也是一個整體的Web開發生态系統,可以讓你直接建構應用程式。

另外還有很多Go的開源架構,例如:Goji、Martini、Gin Gonic、Gocraft等,大家可以根據自己的實際應用和不同架構的特性來進行選擇。

本次分享主要對Golang的簡介,後續和大家分享如何用Golang開發簡單網站。