gpt4 book ai didi

pointers - Go结构指针不是唯一的

转载 作者:IT王子 更新时间:2023-10-29 02:05:51 27 4
gpt4 key购买 nike

我正在尝试创建元素映射。我想使用指针而不是整数作为键。问题是......我一直得到相同的指针。不管我创造多少次。为什么是这样?如果可能,如何在不使用 unsafe 包的情况下获得真正的指针。

package main

import (
"fmt"
)

type Thingy struct{}

var things map[*Thingy]int

func main() {
things = make(map[*Thingy]int)

thing1 := new(Thingy)
tracePointer("thing1", thing1)
things[thing1] = 1

thing2 := new(Thingy)
tracePointer("thing2", thing2)
things[thing2] = 2

thing3 := &Thingy{}
tracePointer("thing3", thing3)
things[thing3] = 3

fmt.Printf("Amount of things: %d\n", len(things))
}

func tracePointer(identifier string, obj interface{}) {
fmt.Printf("%s pointer: %p\n", identifier, obj)
}

输出:

thing1 pointer: 0x546570
thing2 pointer: 0x546570
thing3 pointer: 0x546570
Amount of things: 1

最佳答案

struct{} 是一种特殊情况,它始终使用 0 字节内存并且始终具有相同的地址。

如果你只想要一个虚拟指针,你可以使用type Thingy byte

thing1 pointer: 0x10328000
thing2 pointer: 0x10328020
thing3 pointer: 0x10328021
Amount of things: 3

playground

//编辑

作为James Henstridge在评论中指出,如果 struct{} 在更大的结构中,它们的地址会发生变化。

http://play.golang.org/p/51_PhqDNhk

关于pointers - Go结构指针不是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25954237/

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