使用Go创建注册表项/字符串

使用Go创建注册表项/字符串,go,registry,Go,Registry,我按照此操作在windows注册表中使用以下代码段创建一个键/字符串: 主程序包 进口( “golang.org/x/sys/windows/registry” “日志” ) func main(){ k、 错误:=registry.OpenKey(registry.CURRENT\u用户,`Software\Microsoft\Windows\CurrentVersion\Audio`,registry.QUERY\u值) 如果错误!=零{ log.Fatal(错误) } k、 设置字符串值(

我按照此操作在windows注册表中使用以下代码段创建一个键/字符串:

主程序包
进口(
“golang.org/x/sys/windows/registry”
“日志”
)
func main(){
k、 错误:=registry.OpenKey(registry.CURRENT\u用户,`Software\Microsoft\Windows\CurrentVersion\Audio`,registry.QUERY\u值)
如果错误!=零{
log.Fatal(错误)
}
k、 设置字符串值(“xyz”、“blahblah”)
err=k.Close()
如果错误!=零{
log.Fatal(错误)
}
}
但是没有任何事情发生,没有任何错误。
编辑(澄清):它在任何情况下都不起作用。

您仅使用
QUERY\u VALUE
权限打开密钥,但您还需要
SET\u VALUE
才能成功调用
SetStringValue

您还应该检查
SetStringValue
上的返回值,这可能会告诉您问题所在

k, err := registry.OpenKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Audio`, registry.QUERY_VALUE|registry.SET_VALUE)
if err != nil {
    log.Fatal(err)
}
if err := k.SetStringValue("xyz", "blahblah"); err != nil {
    log.Fatal(err)
}
if err := k.Close(); err != nil {
    log.Fatal(err)
}

你以为会发生什么?更改键值?“什么都没发生”有点太宽泛了,你不认为吗?你忽略了setString和Close的错误。如果你故意闭上眼睛,你期望得到什么结果?总是处理所有错误。没有任何事情发生意味着它不工作,也就是说,它不创建或设置任何注册表值。为模棱两可道歉。