✍️
ZiXiang-Blog
  • Jerry Wang Blog
  • 使用 TorchServe 部署 Model
  • How do AppRTC work in WebRTC mechanism ?
  • [系統設計]- 容易產生設計盲點
  • Golang
    • [Golang] Goroutine Concurrency多執行緒淺談
    • [Golang]: 進階用法
    • Golang go mod 入門
    • [Golang] 讓 Goroutine Debug 變得更簡單
  • Security
    • HTTP Token 使用方式: Basic Token v.s Bearer Token
    • 從 RFC 規格書觀點解析 OAuth 2.0
    • 區塊鏈物聯網架構 解決哪些安全性議題?
  • Broker
    • [深入淺出MQTT]: v3.1.1與v5 的差異
    • Broker 到底是什麼?
  • patterns
    • Patterns for Organizing Domain Logic
    • Domain Model: 從無到有規劃新的服務
    • 淺談CQRS
    • Backend System in Microservice Architecture: Where Does data store?
    • Ambassador pattern with Shared Database Pattern
    • Microservice Pattern 犧牲了什麼?
  • K8s
    • 分散式系統: 現代軟體架構與設計考量
    • Kubernetes 超入門
    • Kubernetes 架構
    • K8s 在 DevOps 中的作用
  • Database
    • Relation Database Index Overview
    • Draft: RDBMS(MySQL) v.s NoSQL (Monogo)
    • [淺談]- How Do RDBMS Thread work ?
    • [淺談]-NoSQL資料庫怎麼選?
    • How do pick the database more correctly?
    • Draft: 關聯式資料庫需要知道的幾件事
  • HTTP
    • Overview The WebSocket Mechanism
Powered by GitBook
On this page
  • GOPATH使用方式(早期使用方式)
  • Go mod 使用方法
  • 總結
  • 參考資料

Was this helpful?

  1. Golang

Golang go mod 入門

Golang: go mod 起手式. Golang 套件到底要怎麼用?!

Previous[Golang]: 進階用法Next[Golang] 讓 Goroutine Debug 變得更簡單

Last updated 4 years ago

Was this helpful?

Go mod 是 go 1.11 version 之後出的管理套件的工具,並且Go 1.13 version 之後成為管理套件的正式工具(成為default)。

GOPATH使用方式(早期使用方式)

在go mod 發布之前都是需要在$GOPATH/src路徑下才能夠使用,當需要使用模組的時候,必須將用到的資料夾link 到$GOPATH/src才能夠使用。

查看GOPATH

以上圖為例,如果要使用模組需確保/home/ubuntu/go/src中有該模組才能夠取用。下面舉hello world實例。

檔案結構: 執行go run main.go 印出 hello world

-hello_GOPATH/
   - main.go
   - src/
   - hello/
       - hello.go

step 1. 將GOPATH指到目前資料夾

go env -w GOPATH=$(pwd)

step 2. 撰寫package hello 模組(package)

package hello
import "fmt"
func PrintHello() { // fun大寫代表public(才能夠被存取)
    fmt.Println("hello world")
}

step 3. 將package資料夾link 到$GOPATH/src/

ln -s `pwd`/hello $(go env GOPATH)/src

step 4. 撰寫package main

package main
import "hello"  // src/hello 資料夾下
func main() {
    hello.PrintHello()
}

執行結果:

Go mod 使用方法

這種用法不用像使用GOPATH的方法,需要改變GOPATH的位置。而是透過go.mod檔案辨識目前要執行的專案位置(取代GOPATH設定)。並且go.mod可以紀錄所有使用的相依模組,只要透過go install指令就可以自動安裝所有相依模組的功能。

檔案結構: 執行go run main.go 印出 hello world

-hello/
   - main.go
   - go.mod
   - hello/
       - hello.go

step 1. go mod init hello

module hello  //產生出來的模組名
go 1.15 // golang 現在的版本

step 2. 撰寫hello 模組

package hello
import "fmt"
func PrintHello() { // fun大寫代表public(才能夠被存取)
    fmt.Println("hello world")
}

step 3. 撰寫package main(需要在最上層)

package main
import "hello/hello"  //module/package name
func main() {
    hello.PrintHello()
}

執行結果:

v1.11之後為了解決套件管理的問題,官方出現了go mod的工具,並且v1.11、v1.12可以共存GOPATH的存在。然而在1.13之後GOPATH跟go mod兩者是不能並存的 (GOPATH不可指向有go.mod 的資料夾) 。

總結

在撰寫Golang 專案的時候,盡量的使用go mod,盡量不修改GOPATH來開發。因為go mod會幫助開發者紀錄相依的模組,方便之後部署、交付程式碼。

參考資料

確認GOPATH位置

https://blog.golang.org/using-go-modules
範例程式碼