How to set environment variables that last

前端 未结 4 1787
甜味超标
甜味超标 2020-12-11 04:48

I\'m trying to set some environment variables on my machine using Go OS

    err := os.Setenv(\"DBHOST\", dbHostLocal)
    if err != nil {
        log.Fatalf(         


        
4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-11 05:40

    Whilst not considered possible, if you're building some cli tool that exits you could consider outputting the equivalent shell to STDOUT like: docker-machine eval.

    Quick and dirty example:

    package main
    
    import (
      "fmt"
      "reflect"
      "strings"
    )
    
    type config struct {
      db_host string
      db_port int
      db_user string
    }
    
    func main() {
      c := config{"db.example.com", 3306, "user1"}
    
      ct := reflect.ValueOf(&c).Elem()
      typeOfC := ct.Type()
    
      for i := 0; i < ct.NumField(); i++ {
        f := ct.Field(i)
        fmt.Printf("%s=%v\n", strings.ToUpper(typeOfC.Field(i).Name), f)
      }
    }
    
    Output:
    $ go run env.go
    DB_HOST=db.example.com
    DB_PORT=3306
    DB_USER=user1
    

    You can then eval it on the command line and have access to those variables.

    $ eval $(go run env.go)
    $ echo $DB_HOST
    db.example.com
    

提交回复
热议问题