---
# System prepended metadata

title: GO 環境設定

---

# GO 環境設定


### 版本管理套件

下載位置
https://github.com/voidint/g/releases

解壓縮後放到
```C:\Program Files\G```

使用g命令時會生成資料夾
```%USERPROFILE%\.g\```

#### 調整系統環境變數

1. 新增
    - PATH C:\Program Files\G
    - PATH %USERPROFILE%\\.g\go\bin
    - GOPATH %USERPROFILE%\go
    - GOROOT %USERPROFILE%\\.g\go

> GOROOT： golang的安装路径，当安装好go之后，默认会安装在/usr/local/go之下。GOROOT的主要作用是标识go的当前安装位置。

> GOPATH： 存放SDK以外的第三方类库；收藏的可复用的代码，包含三个子目录： -- src : 存放项目源码文件 -- pkg : 编译后的包文件 -- bin ：编译后生成的可执行文件

#### 指令集
```
g -v，查看g版本，确认PATH生效
g ls-remote stable，查看当前支持的版本
g install $version，安装指定版本
g use $version，指定使用某个版本
g ls，查看当前版本
g uninstall $version，卸载指定版本

go version
```
---

#### golang module 管理

```
# 取得套件
go get xxxx 

# 棄用, 此方法會把 vendor 的程式碼都下載到本地
# 將套件新增到 vendor 的目錄 (程式碼要使用到新套件) 
go mod vendor 

# 清除用不到的套件
go mod tidy 
```

---

#### 安裝 mingw-w64
> 直接下載 https://jmeubank.github.io/tdm-gcc/articles/2021-05/10.3.0-release

> ref https://blog.csdn.net/kramer_1711/article/details/119416512
1. 下載 https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/sjlj/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0.7z

2. 解壓縮至 C:\Program Files\mingw-w64
3. 在系統環境變數中增加PATH: C:\Program Files\mingw-w64\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin
4. 使用命令 gcc -v 出現版號表示成功

---

### Dockerfile 使用快取

> ref https://myapollo.com.tw/blog/docker-cache-mounts/

在 RUN 時加入快取路徑 --mount=type=cache,target=/go/pkg/mod

```
FROM golang:1.20.12-alpine as builder

WORKDIR /app
COPY . .

RUN go env -w GO111MODULE=on \
    && go env -w CGO_ENABLED=0 \
    && go env
    
RUN --mount=type=cache,target=/go/pkg/mod go mod tidy 
RUN --mount=type=cache,target=/go/pkg/mod go build -o server .

FROM gcr.io/distroless/base
WORKDIR /app

COPY --from=builder /app/server ./
COPY --from=builder /app/resource ./resource/
COPY --from=builder /app/config.docker.yaml ./

EXPOSE 8888
ENTRYPOINT ./server -c config.docker.yaml
```