2017-08-08 98 views
-2

在GoLang中編寫CLI應用程序並希望跨不同會話/命令使用URL。通過Cobra實現CLI,我想在開始時配置URL,然後在其他命令中繼續使用它。即使流程結束,也會緩存或保留值

嘗試使用下面的方法 -

os.Setenv("URL", URL) os.Getenv("URL")

上面的方法只能在同一進程內(如果設置不工作,並得到過程是不同的)。

任何想法我們該怎麼做?

更新: 我想知道是否可以在Go內完成? 我知道它可以很容易地通過將其存儲在文件/數據庫中,甚至在環境變量中設置,但探索在Go中執行它的方法。

+1

有無數的方法來做到這一點。存儲狀態文件。使用數據庫。要求用戶設置一個配置文件。將該值存儲在已知的遠程位置(如S3)中。將其存儲到附加的EPROM中。刻錄成CD。輸出到打卡。從字面上看,還有無數其他的可能性。 – Flimzy

+0

@Flimzy所有這些方法都是外在的。我想通過本地代碼設置和獲取值。 –

+0

您可以通過本機Go代碼完成所有這些操作。你只需要一個用於打卡器的Go驅動程序,並且* voala!* – Flimzy

回答

-2

您可以建立一個簡單的偵聽器,爲其他進程提供請求。它可以接收和提供任何類型的內容。

使用net.Listen(「tcp」,「:8080」)設置一個監聽守護進程很容易。也許你可以利用這個片段作爲樣板:

package main 

import (
    "fmt" 
    "io" 
    "log" 
    "net" 
    "strings" 
) 

type textProcessor struct { 
    input *string 
} 

func (this textProcessor) Write(b []byte) (int, error) { 
    *this.input = string(b) 
    return len(strings.TrimSpace(string(b))), nil 
} 

func main() { 
    t := textProcessor{new(string)} 

    l, err := net.Listen("tcp", ":8080") 
    if err != nil { 
     log.Fatal(err) 
    } 
    defer l.Close() 
    for { 
     // Wait for connection 
     conn, err := l.Accept() 
     if err != nil { 
      log.Fatal(err) 
     } 

     io.Copy(t, conn) 
     fmt.Print("Echo: ", *t.input) 
     conn.Close() 
    } 
} 

檢查出來有遠程登錄本地主機8080事後輸入一些垃圾。

相關問題