J.J. Huang   2020-11-02   Golang   瀏覽次數:次  

Go - 第五章 | 建立 Go 模塊

📑 目錄
  1. 前言
  2. 簡要
  3. 先決條件
  4. 啟動其他人可以使用的模塊
  5. 過程
  6. 單字/句子
  7. 結語

前言

翻譯真的很難,程式語言反而覺得不難⋯⋯
發現官方文件直接翻譯,對於我來說太多會翻譯不好的地方。

註:原文連結

簡要

這是教的學的地一部分介紹了Go基礎的函數。如果你剛開始學Go,請確保你已經看完了Go入門教學,其中介紹了go指令、go模塊和簡單的go程式碼。​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​​​​‌‌​​‌​​​‌​‌‌​‌​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​‌​‌

在這個教學中,你會建立兩個模塊。第一個是從其他的庫或是應用程式導入。第二個是呼叫於第一個。

這個教學順序包括了六個簡單的主題分別說明了語言不同的部分。

  • 建立一個模塊-編寫一個包含可以從另一個模塊調用的功能的小模塊。
  • 從另一個模塊調用你的代碼-導入並使用新模塊。
  • 返回並處理錯誤-添加簡單的錯誤處理。
  • 返回隨機問候語-處理切片中的資料(Go的動態大小的數組)。
  • 返回多人的問候語 -在地圖中存儲鍵/值對。
  • 添加測試-使用Go的內置單元測試功能來測試你的代碼。
  • 編譯並安裝應用程序-在本地編譯並安裝代碼。

先決條件

  • 有一編寫程式的經驗. 這邊的程式碼非常的簡單,但是他會幫助你了解有關於functions,loops,arrays。
  • 編輯程式碼的工具. 可以使用任何的文字編輯器。大多數的編輯器基本上都支援Go。比較受歡迎的編輯器為VSCode(free)、 GoLand(paid)、Vim(free)。
  • 命令提示字元(終端機). Go可以運行在Linux、Mac的PowerShell或Windows的cmd,於任何終端上。

啟動其他人可以使用的模塊

開始建立Go模塊。在模塊中收集一到多個相關的包用於一組離散且有用的函數。例如,你可以使用包含用於財務分析的函數的包來建立一個模塊,其他編寫財務應用程式的人可以使用你的函數。​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​​​​‌‌​​‌​​​‌​‌‌​‌​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​‌​‌

Go程式碼分組在包,而包分組在模塊。包的模塊指定了Go運行代碼所需要的上下文,包括編寫代碼的Go版本及其所需的其他模塊集。

在你新增或是更新你的模塊,你會發布新的版本。開發者在模塊中使用的方法,可以導入更新版本,並在推上正式環境前做測試。

  • 開啟命令提示字元並且CD到主目錄
    • Linux或Mac
      1
      cd
    • Windows
      1
      cd %HOMEPATH%
  • 建立一個greetings原始碼的目錄
    • 範例
      1
      2
      mkdir greetings
      cd greetings
  • 使用go mod init指令來建立go.mod檔
    • 執行go mod init指令,為其提供代碼所在模塊的路徑。這裡使用example.com/greetings為模塊的路徑,在正式環境下,這是個可以下載的url
      1
      2
      $ go mod init example.com/greetings
      go: creating new go.mod: module example.com/greetings
    • 使用go mod init指令建立go.mod將你的程式碼標識為可以從其他代碼中使用的模塊。該檔案目前只有包含你的模塊名稱和所使用的Go版本。但是當你新增依賴(意旨:使用其他的函數模塊),那go.mod檔內容將會有使用的模塊版本清單。這樣可以使構建具有可複制性,並使你可以直接控制要使用的模塊版本。
  • 在你的文字編輯器裡面建立一個greetings.go的檔案,並在裡面寫程式碼。
  • 將以下的程式碼複製貼上到greetings.go裡面,並且儲存。
    • 程式碼
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      package greetings

      import "fmt"

      // Hello returns a greeting for the named person.
      func Hello(name string) string {
      // Return a greeting that embeds the name in a message.
      message := fmt.Sprintf("Hi, %v. Welcome!", name)
      return message
      }
      • 這是你第一個模塊的程式碼,這函數返回問候來訪問他的人。下一步你將會寫調用這方法的程式碼
      • 在這個程式碼,你:
        • 宣告一個greetings包以收集相關函數。
        • 實作一個hello函數回傳問候。
          • 這個方法需要一個name的參數其型態為string和定義回傳的型態是string。在Go,名稱由大寫字母開頭的函數可以由不在同包中的函數調用。
            Go - 第五章 - 圖 1 (function syntax)
        • 宣告一個message變量用於儲存你的問候。
          • 在Go,:=運算符是在一行中聲明和初始化變量的快捷方式(Go使用右側的值確定變量的類型)。從長遠來看,你可能這樣寫:
            1
            2
            var message string
            message = fmt.Sprintf("Hi, %v. Welcome!", name)
        • 使用fmt包的Sprintf函數建立問候消息。Sprintf將name參數的值替換為%v格式動詞。插入name參數的值將完成問候語。
        • 將格式化的問候語文本返回給呼叫者。

過程

這邊簡單示範一下上述官方的教學。​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​​​​‌‌​​‌​​​‌​‌‌​‌​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​‌​‌

註:這邊的路徑使用的是本地某個暫存資料夾做示範。

Go - 第五章 - 圖 2 (01 min)

單字/句子

以下單字,有的其實都看得懂,純粹就是想要加強紀錄、練習發音、翻譯意思。​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌​​​‌​​‌‌​​​​​​‌‌​​‌​​​‌​‌‌​‌​‌‌​​‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​‌​‌

單字/句子 翻譯
fundamental 基本的
features 特徵
intended 意向的
brief 簡要
illustrate 說明
slices 切片
dynamically-sized 動態大小
multiple 多
pairs 對
locally 本地的
prompt 提示
identifies 確定
reproducible 可複制的
direct 直接
capital letter 大寫字母
operator 算子
shortcut 捷徑
initializing 初始化
variable 變量
determine 確定
substitutes 替代品
Inserting 插入

結語

這邊的重點我著重放在go.mod,主要是理解module和package的關係。自己動手做了之後,可以初步了解其關係和層級;另外還有在建置一個新的專案的時候,透過go mod init來產生go.mod檔。


註:以上參考了
Golang Documentation