即使进程结束,也要缓存或保留一个值

时间:2017-08-08 09:59:26

标签: go go-cobra

在GoLang中编写CLI应用程序,并希望在不同的会话/命令之间使用URL。通过Cobra实现CLI,我想在开始时配置URL,然后在其他命令中继续使用它。

尝试使用以下方法 -

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

以上方法仅适用于同一过程(如果设置和获取过程不同,则无效)。

我们怎么知道呢?

更新: 我想知道是否可以在Go内部完成? 我知道可以通过将其存储在文件/数据库中,甚至在环境变量中设置,但在Go中探索方法来轻松完成。

1 个答案:

答案 0 :(得分:-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()
    }
}

使用 telnet localhost 8080 查看,然后输入一些垃圾。