Skip to main content

การอ่าน ENV

ENV คืออะไร ?

ENV หรือชื่อเต็มคือ environment variables คือค่าที่ computer แต่ละเครื่องที่เก็บคู่กับสภาพแวดล้อมของตัวเองเอาไว้ ซึ่งจะสามารถใช้งานร่วมกับ process ของ computer ได้ (มองง่ายๆเป็นตัวแปรระดับ process ของ computer)

เช่น

  • TEMP = เตัวแปรสำหรับเก็บ location ของ temporary files
  • HOME = เก็บที่อยู่บ้านของแต่ละเครื่อง

สำหรับ Linux / Mac สามารถลองพิมพ์คำสั่ง env ที่ terminal เพื่อดูค่าได้

env

env-01

ซึ่งแน่นอน ภาษา Go นั้นเมื่อมีการ run ขึ้นมา = จะเกิดเป็น process บนเครื่อง เท่ากับว่าก็จะสามารถเข้าถึงตัวแปรของ environment ได้เช่นกัน

โดยปกติ มีวิธีใช้งานอยู่ด้วยกัน 2 วิธีคือ

  1. อ่านจาก env เครื่องโดยตรง (อ่านจากค่า env ที่เราพิมพ์ไปเมื่อกี้)
  2. อ่านจาก env file (ไม่อ่านจากเครื่องโดยตรง แต่อ่านจากไฟล์ environment ที่เตรียมไว้แทน)

วิธีที่ 1 env เครื่อง

main.go

package main

import (
"os"
"github.com/gofiber/fiber/v2"
)

func getEnv(key, fallback string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return fallback
}

func main() {
app := fiber.New()

// Setup routes
app.Get("/api/config", getConfig)

// Use the environment variable for the port, default to 8080 if not set
port := getEnv("PORT", "8080")

app.Listen(":" + port)
}

func getConfig(c *fiber.Ctx) error {
// Example: Return a configuration value from environment variable
secretKey := getEnv("SECRET_KEY", "defaultSecret")

return c.JSON(fiber.Map{
"secret_key": secretKey,
})
}

คำสั่ง run

export SECRET_KEY=123 # ทำการเพิ่มตัวแปร environment เข้ามาใหม่

go run main.go

ผลลัพธ์ก็จะสามารถดึงค่า environment ออกมาได้

env-02

วิธีที่ 2 env file

Ref: https://pkg.go.dev/github.com/joho/godotenv

ให้เพิ่ม library สำหรับการอ่านผ่าน .env file เข้าไป

go get github.com/joho/godotenv
  • library นี้จะสามารถอ่านค่าจาก .env เข้ามาได้เลยผ่านคำสั่ง godotenv.Load() ออกมาได้
  • ที่ .env file ลองทดสอบเพิ่มค่าเป็น
PORT=8080
SECRET_KEY=mysecretkey
  • ที่ main.go ลองเปลี่ยนมาเรียกโดยใช้ library godotenv แทน
package main

import (
"github.com/gofiber/fiber/v2"
"github.com/joho/godotenv"
"log"
"os"
)

func main() {
// Load environment variables from .env file
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}

app := fiber.New()

// Setup routes
app.Get("/api/config", getConfig)

// Use the environment variable for the port
port := os.Getenv("PORT")
if port == "" {
port = "8080" // Default port if not specified
}

app.Listen(":" + port)
}

func getConfig(c *fiber.Ctx) error {
// Example: Return a configuration value from environment variable
secretKey := os.Getenv("SECRET_KEY")
if secretKey == "" {
secretKey = "defaultSecret" // Default value if not specified
}

return c.JSON(fiber.Map{
"secret_key": secretKey,
})
}

ผลลัพธ์ก็จะสามารถดึงค่า environment ออกมาได้เช่นกัน

env-03