注冊表包中的文檔GetValue()說:GetValue 檢索與打開密鑰 k 關聯的指定值的類型和數據。它填充緩沖區 buf并返回檢索到的字節數 n。如果 buf 太小而無法容納存儲的值,則會返回 ErrShortBuffer 錯誤以及所需的緩沖區大小 n。如果未提供緩沖區,則返回 true 和實際緩沖區大小 n。如果未提供緩沖區,則 GetValue 僅返回值的類型。如果該值不存在,則返回錯誤ErrNotExist。GetValue 是一個低級函數。如果值的類型已知,請改用適當的 Get*Value 函數?!本臀叶裕也恢雷员眄椀闹殿愋?。但是,我只需要將值打印為字符串。GetValue()接受值名稱和“緩沖區”,但緩沖區的類型為 []byte。它不是通過引用傳遞的,所以我不能只是創建var buf []byte、傳遞它并讀取它。我無法用&buf(type *[]byte)傳遞它。我無法使用byte.Buffer(也類型不匹配)。我覺得我缺少一些非常簡單的東西。代碼:var buf []byte //????_, _, e := myKey.GetValue(valuename, buf)if e != nil { panic(e)}fmt.Printf("Value: %s\n", string(buf)) // Prints blank
1 回答

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
我想你提到的注冊表API是Windows注冊表。要使用這些類型的 API,您必須對您期望的調用輸出大小做出最佳猜測:
buf:=make([]byte,1024)
typ, n, e := myKey.GetValue(valuename, buf)
if e==ErrShortBuffer {
// Go back, try with a larger buffer size
buf=make([]byte,n)
typ, n, e = myKey.GetValue(valuename, buf)
}
- 1 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消