我知道使用golang包是不安全的,但我这样做只是为了教育目的。unsafe
这个想法是复制结构的切片字段,用反射包和不安全的指针复制它,修改并用新的切片替换原始切片。
看起来新切片已创建并具有正确的容量/长度,并且它包含类型的实例。但该实例的所有字段(名称、价格和 Qnty)都有错误的值。所以我想我在指针和获取加勒巴德数据方面做错了什么:GoodForSale
package main
import (
"fmt"
"reflect"
"unsafe"
)
type GoodForSale struct {
Name string
Price int
Qnty int
}
type Lead struct {
ID int
Name string
ContactName string
Budget int
Items []GoodForSale
DateTime string
Status int
Win bool
}
func main() {
lead := &Lead{
ID: 41,
Name: "Phone",
ContactName: "John Smith",
Budget: 30000,
Items: []GoodForSale{
{
Name: "Iphone 6",
Price: 100,
Qnty: 3,
},
},
DateTime: "12.08.2020 11:23:10",
Status: 150,
Win: false,
}
//Change Items
pt1 := unsafe.Pointer(&lead.Items)
copyItems := &reflect.SliceHeader{
Data: uintptr(pt1),
Cap: cap(lead.Items),
Len: len(lead.Items),
}
items := *(*[]GoodForSale)(unsafe.Pointer(copyItems))
fmt.Println(items[0].Name)
}
看起来我在这里错过了一些关于指针如何工作的东西。但是,我怎样才能使这个想法正确运作呢?
这是一个去游乐场网址: https://play.golang.org/p/SKtJWe9RVEU
慕侠2389804
噜噜哒
相关分类