DEV Community

Cover image for Windows中Golang docker + go.mod
JU DaDao
JU DaDao

Posted on • Updated on

Windows中Golang docker + go.mod

圖文版
如何使用docker來完成go的安裝。這篇文章會示範純粹安裝golang docker然後執行本地端定義的module

大綱

  1. 創建基本的docker file,創建golang image(optional)
  2. 將當前資料夾掛載進container下的app/ folder
  3. 執行go init 將go.mod 路徑設為/app
  4. 新增module package
  5. main.go import
  6. 執行

Create image

首先先創建基本的docker file

FROM golang:latest #拉取golang docker

WORKDIR /app

EXPOSE 3000
Enter fullscreen mode Exit fullscreen mode

Create container & mount your local folder

  • 可以創建bat檔(windows)來快速執行。第一行創建完image後就沒用了因此可以註記掉。第二可以選擇自己正在工作的資料夾,將他移入docker 的/app底下(-v 為mount,mout進去後本機端跟docker端的資料會同步)。

  • 假設目前的資夾叫做golen,將go len掛載到container下的/app

docker build -t judd/golan .

docker run -it -d -v D:\perProject\golen:/app --name goMoxa judd/golan
Enter fullscreen mode Exit fullscreen mode

Enter container

創建好之後可以進入docker中

  • 如果是linux 可以輸入attach 查看

  • 如果windows直接點選圖形介面

之後點選Exec進入command line。個人習慣會輸入"/bin/bash"。這樣可以快速的使用所有bash快捷,例如上鍵可以快速存取上一個輸入的指令。
docker

set go.mod

進入container後輸入以下指令,因為我在container中的workspace 是在/app底下,因此init選在/app

go mod init /app
Enter fullscreen mode Exit fullscreen mode

go mod init必須要是你的working base非常重要(在此docker 中就是之前設定的/app),不然當docker進行編譯的時候會去找container 中go 的資料夾

而 go.mod內的內容,代表當go 編譯的時候會去/app底下撈module

以下是go.mod內容。module路徑被設為/app底下

//go.mod
module app

go 1.22.0
Enter fullscreen mode Exit fullscreen mode

Add new module

接著開始創建module,我將module都放入src資料夾中並創建名為"hello"的module。
(也可以不用放在src內,只需要以app/作為root dir import package即可,Ex. 若此module是放在main.go同層級,在main.go import hello package只需要將import "app/src/hello"改成import "app/hello"即可)

此時資料結構如下

-app/
   - go.mod
   - src/
      - hello/
          - hello.go
Enter fullscreen mode Exit fullscreen mode

hello.go的內容

package hello



import "fmt"



func PrintHello() {

fmt.Println("hello world")

}
Enter fullscreen mode Exit fullscreen mode

main.go import package

創建要執行的主程式main.go,使用名為"hello"的package。以下是main.go內容

//main.go
package main

import (

"app/src/hello" // 引入本地的 hello package

)



func main() {

// 調用 hello 模組中的 PrintHello 函式

hello.PrintHello()

}
Enter fullscreen mode Exit fullscreen mode

此時的docker內資料夾結構

-app/
   - main.go
   - go.mod
   - src/
      - hello/
          - hello.go
Enter fullscreen mode Exit fullscreen mode

Run

接著在docker 內cd 到app/底下執行

go run main.go
Enter fullscreen mode Exit fullscreen mode

result

Top comments (0)