[Golang] Go Web 開發環境與語言架構指南

Intro

Golang官方網站

WikePedia - Go語言


安裝

官方下載頁面依據OS環境下載並安裝Golang: https://golang.org/doc/install

檢查Golang版本:

$ go version

Quickstart

Tutorial: Get started with Go

  1. 在任一專案目錄下建立./hello.go:

    package main

    import "fmt"

    func main() {
    fmt.Println("Hello, World!")
    }

  2. 使用run指令快速直譯執行程式碼:

    $ go run .


Go Modules - Package套件管理

Tutorial: Create a Go module

在專案目錄下利用 mod ini 指令初始 Go modules 後即完成專案套件相依管理,此專案下程式所 import 到的 packages 將會自動安裝載入:

$ go mod init 

Golang 套件 import 較嚴格,未於程式引用到的 package 將會報錯提醒。

官方套件範例

net/http package


編譯與安裝

Compile and install the application

使用build指令編譯程式,Golang會依照OS環境編譯出可執行檔:

$ go build

可執行檔範例:

// Linux or Mac
$ ./hello
Hello, World!

// Windows
$ hello.exe
Hello, World!

專案環境變數 - Environment Variable

若要在專案中簡易使用.env,可以試試joho/godotenv套件的懶人載入法:

import _ "github.com/joho/godotenv/autoload"

Web Applications 建置

Writing Web Applications


Goroutine - Concurrency (並發/並行)

Golang 採用 CSP(Communicating Sequential Process) 模式實現 Goroutine 輕量級協程,透過 Multi-threading 實踐,不需應用到 Multi-processing。

Diagram

Coroutine (協程) Wikipedia

Goroutine和channel的详细理解(一) # Day14 Go併發症狀- Goroutines (go) - iThome

GOMAXPROCS

此參數用來限制程式執行時 CPU用到的最大核心數量。目前預設值是本機核心數。

func GOMAXPROCS - runtime package

sync.Mutex (互斥鎖)

互斥鎖 sync.Mutex 可以限制同時間只有一個 goroutine 能存取該變數。

Go - sync.Mutex

Go 簡單例子來理解 sync.Mutex 和 sync.RWMutex

When should you use a mutex over a channel?

References

Leave a Reply

Your email address will not be published. Required fields are marked *