[英]Convert string to *uint64 in golang
假設有一個字符串保存uint64
類型變量的地址,我們可以將此地址解析回*uint64
嗎?
例如:
i := uint64(23473824)
ip := &i
str := fmt.Sprintf("%v", ip)
u, _ := strconv.ParseUint(str, 0, 64)
u
是uint64
。 如何從這個值中取出指針?
游樂場鏈接: https : //play.golang.org/p/1KXFQcozRk
它很簡單:
number, err := strconv.ParseUint(string("90"), 10, 64)
然后做一些錯誤檢查,希望它有幫助。
你可以用
ip = (*uint64)(unsafe.Pointer(uintptr(u)))
盡管我不知道 Go 為您提供了關於此類指針有效性的什么保證,但我也想不出應該使用此代碼的任何用例。
基於nos 答案。
盡管在技術上是可能的,但有理由不信任您編寫的代碼。 垃圾收集將使用您指向的內存(帶字符串)。
看看下面代碼的結果。
package main
import(
"fmt"
"strconv"
"reflect"
"unsafe"
)
func produce() string {
i := uint64(23473824)
ip := &i
str := fmt.Sprintf("%v", ip)
fmt.Println(i, ip, str)
return str
}
func main() {
str := produce()
for i := 0; i < 10; i++ {
x := make([]int, 1024*1024)
x[0] = i
}
u, _ := strconv.ParseUint(str, 0, 64)
ip := (*uint64)(unsafe.Pointer(uintptr(u)))
fmt.Println(ip,*ip, reflect.TypeOf(u)) // u is uint64, how to get pointer out of this value?
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.