Category Archives: Golang

Đọc biến môi trường từ file

Theo Nguyên tắc số 3 của The Twelve-Factor App thì cấu hình cần phần tách biệt khỏi source code.

Thông thường cấu hình sẽ được lưu ở biến môi trường hoặc một dịch vụ bên ngoài như AWS Secrets Manager.

Trong Golang, để đọc biến môi trường ta có thể sử dụng code bên dưới

// set biến môi trường
os.Setenv(key, value)

// get biến môi trường
value := os.Getenv(key)

Để đọc biến môi trường được cấu hình từ file (ví dụ như .env) thì ta có thể sử dụng package godotenv

godotenv

go get github.com/joho/godotenv

godotenv cung cấp phương thức Load để đọc file env

// mặc định đọc file .env ở trong thư mục hiện tại
godotenv.Load()

// hoặc chỉ định file
godotenv.Load("/path/to/file/env")

File env hỗ trợ format yaml, tham khảo tài liệu ở đây

viper

Ngoài godotenv thì viper là package phổ biến nhất hỗ trợ các format như JSON, TOML, YAML, HCL, envfile và cả Java properties config file.

go get github.com/spf13/viper
// cấu hình đường dẫn file env
viper.SetConfigFile(".env")

// đọc cấu hình
viper.ReadInConfig()

// đọc giá trị
viper.Get(key)

// xác nhận kiểu dữ liệu
value, ok := viper.Get(key).(string)
// nếu kiểu dữ liệu của `key` là string thì ok trả về true

Golang on M1

Lỗi

Failed to launch: could not launch process: can not run under Rosetta, check that the installed build of Go is right for your CPU architecture

Nguyên nhân

Do package dlvdlv-dap sai architecture trên M1.

Khắc phục

  • Kiểm tra phiên bản Golang đã cài đặt đúng chưa bằng cách
go env | grep GOARCH
# GOARCH="arm64"

Nếu phiên bản là arm64 trên M1 là đúng, nếu khác thì cần phải cài đặt lại. Download ở đây https://golang.org/dl/

Tiếp theo mở VSCode, gõ Shift + Command + P tìm "Go: Install/Update Tools", click vào dlvdlv-dap chọn ok để install/update.

Bây giờ mở lại debug (Shift + Command + D) sẽ chạy được như ý muốn.