go語言如何入門?從一個簡單例子開始學起

QF董懂發表於2019-04-09

首先先分享一個可以在本地就能檢視文件的騷操作(linux系統)

1.開啟命令列終端,輸入godoc -http=:8000,如果想後臺執行在後面加個&

2.然後開啟瀏覽器,輸入網址:localhost:8000 就可以愉快地看文件了

go語言是個什麼東西我想不用我介紹了~~~大家百度吧

接下來我會一步一步地敲一個hello who

如果你使用的是linux系統:

sudo apt-get install golang

如果沒成功:

sudo add-apt-repository ppa:gophers/go

sudo apt-get update

sudo apt-get install golang

在終端執行go version

如果失敗,看下面配置環境變數

為GOPATH做準備

GOPATH對Go來說是一個很重要的環境變數,在設定環境變數前,先要做一些準備工作

在你喜歡的地方建立一個資料夾,你可以隨便起名,我呢是建在/home/username目錄中的,資料夾的名字就叫go。在該資料夾下再建3個資料夾,名字分別為/bin,/pkg,/src。/src放原始碼,使用go get命令時,原始碼就下載在這個資料夾。/bin存放使用go install命令編譯的可執行檔案。/pkg存放編譯後生成檔案(這個目錄的作用是我百度的……我也不知道該咋用,畢竟初學者0.0)至此,準備工作完成。

設定環境變數

在/etc/profile或者~/.profile中加入這幾行命令

export GOROOT=/usr/lib/go

export GOPATH=/home/username/go(這裡視情況而定,看自己的資料夾建在哪裡啦)

export PATH=$PATH:$GOPATH/bin(新增了這個環境變數後,go install生成的可執行檔案在任何位置都能執行了0.0)

然後,在終端中敲入這樣的程式碼,讓配置生效

source .profile(看你改了哪個檔案,這個檔案只是為特定單個使用者服務的,也就是說只對一個使用者起作用)

然後,在終端輸入 go env

可以看到所有go相關的環境變數

在$GOPATH/src目錄下,新建名為hello的資料夾,在該資料夾下新建hello.go的原始碼檔案

package main

func main() {

who := "world!"

if len(os.Args[1:]) > 0 {

who = ""

for _, arg := range os.Args[1:] {

who += " " + arg

}

fmt.Println("hello", who)

}

go語言的工具鏈可以說是十分厲害了,其中就有一個叫goimports的工具

如果你沒有安裝下面貼出安裝命令:

sudo apt-get install golang-golang-x-tools

然後執行以下命令:

goimports -w hello.go

-w引數作用為將結果寫入檔案,而不是輸出在終端,來看看現在的程式碼

package main

import (

"fmt"

"os"

)

func main() {

who := "world!"

if len(os.Args[1:]) > 0 {

who = ""

for _, arg := range os.Args[1:] {

who += " " + arg

}

}

fmt.Println("hello", who)

}

gofmt也有將程式碼規範化的功能,只是goimports工具更加強大,可以自動匯入需要的包。

進入hello目錄,在終端中輸入go install或者go install hello

進入/bin目錄,你會發現多了一個名為hello的檔案,在終端中輸入hello

~$ hello

hello world!

輸入hello Go language

~$ hello Go language

hello Go language

解析

go語言如何入門?從一個簡單例子開始學起

接下來我們來解析這個程式。

首先看package main

在Go語言中,所有的程式碼必須從屬於包,每一個Go語言程式都必須包含一個main包以及一個main()函式,main()函式是整個程式的入口,最先被執行。其實,Go語言還可能包含init()函式,先於main()執行,用於初始化包。需要注意的是,包名和函式名不會發生命名衝突。

Go語言針對的處理單元是包而非檔案,在Go語言編譯器看來,只要開頭的包宣告一樣,那麼它就屬於同一個包,就相當於都放在一個檔案裡,很難理解對吧~~~就好像糖葫蘆,雖然插著好多個山楂,但是每個山楂都屬於這個糖葫蘆中的一部分。由於有這樣的特性,我們可以將包拆成任意數量的原始碼檔案。

import語句就不用我介紹了

Go語言不需要;(除非在同一行中輸入多個語句),if和for語句也不需要(),分號由編譯器自動新增。

Go語言的函式和方法由func關鍵字定義。

大家可能會看到:=這樣怪異的表達,這個表示式完成了兩個操作,宣告和賦值,不需要宣告變數型別不代表Go語言是弱型別語言,Go語言是強型別語言,不需要宣告型別是因為Go會從初始化值中推匯出型別。只能用在函式中,如果宣告包一級變數,可以使用var關鍵字,var name = ???或者 var name type。而後面的who變數為什麼不用,因為一旦使用了who:=""這樣的表達,就相當於在if語句作用域內部重新宣告瞭一個名為who的變數,生命週期為if語句內部,就是區域性變數。

在for迴圈中,使用了range關鍵字,每次迴圈會返回鍵和值,值儲存在arg中,_則是鍵。_,arg 這樣的表達看起很奇怪,這是因為Go語言不允許宣告變數後不使用,而我們確實用不到range返回的鍵,所以使用 _ 這個東西,相當於垃圾堆。

os.Args是一個string型別的切片(slice)和python差不多


相關文章