Go語言學習之1 基本概念、環境搭建、第一個Go程序

1、環境搭建html

見個人這篇博客 https://www.cnblogs.com/xuejiale/p/10258244.htmlpython

2、golang語言特性
1. 垃圾回收
    1) 內存自動回收,不再須要開發人員管理內存
    2) 開發人員專一業務實現,下降了心智負擔
    3) 只須要new分配內存,不須要釋放
2. 自然併發
    1) 從語言層面支持併發,很是簡單
    2) goroute,輕量級線程,建立成千上萬個goroute成爲可能
例如:linux

咱們建立F:\go\project\src\go_dev\day1\goroute目錄,並在該目錄下建立文件goroute.go及main.go
goroute.go:golang

package main import( "fmt" ) func test_goroute(a int) { fmt.Println(a) }

main.go:併發

package main import( "time" ) func main() { //goroute 併發,使用go關鍵字
    for i := 0; i < 100; i++ { go test_goroute(i) } //這塊sleep 2s是爲了等待上面"線程"執行完
    time.Sleep(2*time.Second) //sleep 2s
}

解釋:函數

 goroute,輕量級線程經過關鍵字go來執行(go test_goroute(i))

運行:ui

       到F:\go\project\src\go_dev\day1\goroute目錄下運行go run main.go goroute.go  能夠發現100個數據打出是亂序spa

注意:運行的命令 go run main.go goroute.go  (go run main.go會報錯線程

    3) 基於CSP(Communicating Sequential Process)模型實現 (goroute + channel算是CSP模型)
3. channel
    1) 管道,相似unix/linux中的pipe3d

func main() { pipe := make(chan int,3) pipe <- 1 pipe <- 2 }

    2) 多個goroute之間經過channel進行通訊

在F:\Go\project\src\go_dev\day1\goroute_example目錄下建立goroute和main目錄
goroute目錄下建立add.go:
add.go

package goroute func Add(a int, b int, c chan int) { sum := a + b
    c <- sum }

在main目錄下建立main.go:

main.go

package main import ( "go_dev/day1/goroute_example/goroute"
    "fmt" ) func main() { var pipe chan int pipe = make(chan int, 1) go goroute.Add(100, 200, pipe) sum := <- pipe fmt.Println("sum = ", sum) }

解釋:

var pipe chan int pipe = make(chan int, 1) 分別爲定義一個管道,裏面能夠存一個整數

運行:

    方法1. 進入到F:\Go\project目錄下,執行下面的命令

    go run src/go_dev/day1/goroute_example/main/main.go

    方法2. 先編譯成二進制文件,而後執行(需建立F:\go\project\bin目錄,存放編譯後的二進制文件)

    go build -o bin/goroute_test.exe go_dev/day1/goroute_example/main 注意該命令與方法1 命令的區別

注意:Windows下可執行文件需以.exe結尾。

    3) 支持任何類型

4. 多返回值
    一個函數返回多個值

func calc(a int, b int)(int,int) { sum := a + b avg := (a+b)/2
    return sum, avg }

調用:

sum, avg := calc(10, 20) //若是隻須要第一個返回值:
sum, _ := calc(10, 20)

5. 包的概念

    1)  和python同樣,把相同功能的代碼放到一個目錄,稱之爲包;
    2)  包能夠被其餘包引用;
    3)  main包是用來生成可執行文件,每一個程序只有一個main包;
    4)  包的主要用途是提升代碼的可複用性。

例如:

建立F:\Go\project\src\go_dev\day1\package_example目錄,在該目錄下分別建立calc和main目錄,在calc目錄下建立add.go和sub.go,在main目錄下建立main.go
add.go (注意add.go和sub.go中的方法名首字母必須大寫,不然沒法被外部調用)

package calc func Add(a int, b int) int { return a + b }

sub.go

package calc func Sub(a int, b int) int { return a - b }

main.go

package main import ( "fmt"
    "go_dev/day1/package_example/calc" ) func main() { sum := calc.Add(100, 200) sub := calc.Sub(100, 200) fmt.Println("add = ", sum) fmt.Println("sub = ", sub) }

運行:

方法1. 執行go run src/go_dev/day1/package_example/main/main.go

 

方法2. 生成可執行文件

相關文章
相關標籤/搜索