gpt4 book ai didi

Golang 可执行刷新

转载 作者:数据小太阳 更新时间:2023-10-29 03:47:07 25 4
gpt4 key购买 nike

我有一个写入/更新 json 的函数。但是我需要停止可执行文件,再次运行 go build 并重新运行可执行文件以更新 url 中的 json。

例如,我有一个 Handler.go 文件,它从 URL 获取参数作为键并运行 if 条件并更新 json。因此,如果在构建可执行文件之前的 json 值为 {"Name":"Sneha"} 并且我在 url 中传递参数"Nair",则 json 在服务器中更新为 {"Name":"Nair"},但没有得到在 URL 中更新。所以我必须停止可执行文件,再次运行 go build 并再次运行可执行文件以在 URL 中反射(reflect)新的 json 值 {"Name":"Nair"}。

<强>1。有人可以提出替代想法吗?

<强>2。我们可以在函数内运行 go build 或 go update 吗?

非常感谢帮助。

PS:我有 goagain.go 的 URL。但不确定这是否符合我的要求。

Handler.go

func handler(w http.ResponseWriter, r *http.Request) {
keys, ok := r.URL.Query()["key"]
if !ok || len(keys) < 1 {
log.Println("Url Param 'key' is missing")
return
}
key := keys[0]
log.Println("Url Param 'key' is: " + string(key))
if key == "java" {

commands := []string{
"Version=`java -version`",
"sed -i -e 's/^\\( *Name: *\\) .*$/ Name:\"Java\",/' Handler.go",
"sed -i -e 's/^\\( *Version: *\\) .*$/ Version:\" '$Version'\",/' Handler.go",

}
exe_cmd(commands)

}

if key == "go" {

commands := []string{
"Version=`go version`",
"sed -i -e 's/^\\( *Name: *\\) .*$/ Name:\"Go\",/' Handler.go",
"sed -i -e 's/^\\( *Version: *\\) .*$/ Version:\" '$Version'\",/' Handler.go",

}
exe_cmd(commands)

}

GetHands := GetHand{

Name:"java",
Version:" 1.7.0_71",

}

if err := json.NewEncoder(w).Encode(GetHands); err != nil {
panic(err)
}

所以在运行这个包时,url 显示 json 值:{"name":"java","version":"1.7.0_71"}如果我调用网址:http://localhost:8080/?key=go此 Handler.go 更新为,

GetHands := GetHand{

Name:"go",
Version:" 1.9",

}

如果我停止可执行文件,再次运行 go build 并再次运行可执行文件 url 返回为:{"name":"go","version":"1.9"}

所以基本上我需要动态 url,它在点击 http:/localhost/?key=go 时会返回 go 的相应值,而 htpp://localhost/?key=java 会返回 java 的相应值。这应该在不重新启动可执行文件或重新运行 go build 的情况下实现

最佳答案

很难准确理解你想要什么。但我怀疑本质上你只是想从 shell 命令中提取输出并将其写入 JSON。

为此,无需修改 Handler.go 文件或执行 go build。您可以简单地将输出直接写入 GetHand 结构。

一个基本的例子如下:

    package main

import (
"fmt"
"os/exec"
)

var cmds = map[string][]string{
"go": []string{"/usr/local/go/bin/go", "version"},
"java": []string{"java", "-version"},
}

type GetHand struct {
Name string
Version string
}

func handleKey(key string) (*GetHand, error) {

cmd := cmds[key]
if cmd == nil {
return nil, fmt.Errorf("No such key : %v", key)
}

b, err := exec.Command("/usr/local/go/bin/go", "version").Output()
if err != nil {
return nil, err
}
return &GetHand{
Name: key,
Version: string(b),
}, nil
}

func main() {
h, err := handleKey("go")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(h)

h, err = handleKey("java")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(h)
}

关于Golang 可执行刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com