DEV Community

Mic Pantakan
Mic Pantakan

Posted on

ลองเล่น go package จาก GitHub แบบไม่ง้อ go.mod

#go

ถ้าสมมุติว่าเราเห็น package ที่น่าสนใจอื่นๆนอกเหนือจาก standard library ใน go แล้วอยากเอามาลองเล่น

ยกตัวอย่างเช่น https://github.com/kelseyhightower/envconfig

สร้าง main.go ขึ้นมาจากนั้นก๊อป code ในตัวอย่างไปแปะ

package main

import (
    "fmt"
    "log"
    "time"

    "github.com/kelseyhightower/envconfig"
)

type Specification struct {
    Debug       bool
    Port        int
    User        string
    Users       []string
    Rate        float32
    Timeout     time.Duration
    ColorCodes  map[string]int
}

func main() {
    var s Specification
    err := envconfig.Process("myapp", &s)
    if err != nil {
        log.Fatal(err.Error())
    }
    format := "Debug: %v\nPort: %d\nUser: %s\nRate: %f\nTimeout: %s\n"
    _, err = fmt.Printf(format, s.Debug, s.Port, s.User, s.Rate, s.Timeout)
    if err != nil {
        log.Fatal(err.Error())
    }

    fmt.Println("Users:")
    for _, u := range s.Users {
        fmt.Printf("  %s\n", u)
    }

    fmt.Println("Color codes:")
    for k, v := range s.ColorCodes {
        fmt.Printf("  %s: %d\n", k, v)
    }
}
Enter fullscreen mode Exit fullscreen mode
go get 
Enter fullscreen mode Exit fullscreen mode

เราจะเจอกับ error ที่บอกว่าหา go.mod ของเราไม่เจอ

go run main.go

go: go.mod file not found in current directory or any parent directory; see 'go help modules'
Enter fullscreen mode Exit fullscreen mode

ใหไปเช็คที่ go env ก่อน ว่าค่า GO111MODULE=auto รึยังถ้ายังก็เปลี่ยนมันซะ

go env -w GO111MODULE=auto
Enter fullscreen mode Exit fullscreen mode

จากนั้นให้ go get อีกรอบคับ

go get 
Enter fullscreen mode Exit fullscreen mode
export MYAPP_DEBUG=false
export MYAPP_PORT=8080
export MYAPP_USER=Kelsey
export MYAPP_RATE="0.5"
export MYAPP_TIMEOUT="3m"
export MYAPP_USERS="rob,ken,robert"
export MYAPP_COLORCODES="red:1,green:2,blue:3"

go run main.go

Debug: false
Port: 8080
User: Kelsey
Rate: 0.500000
Timeout: 3m0s
Users:
  rob
  ken
  robert
Color codes:
  red: 1
  green: 2
  blue: 3
Enter fullscreen mode Exit fullscreen mode

สำหรับคนที่พึ่งลง go 1.16 อาจจะไม่เจอปัญหานี้
เพราะว่าค่าของ GO111MODULE น่าจะเป็น auto มาอยู่แล้ว

จริงๆ มันก็มีวิธีสร้าง go mod ที่เร็วกว่าวิธีนี้อยู่เหมือนกัน นะ 🤣

Ref: https://blog.golang.org/go116-module-changes

Top comments (0)