繁体   English   中英

Go结构指针不是唯一的

[英]Go struct pointers not unique

我正在尝试创建元素图。 我想使用指针而不是整数作为键。 问题是...我不断得到相同的指针。 无论我创建多少次。 为什么是这样? 如何获得真实的指针,如果可能的话,不使用不安全的软件包。

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

操场

//编辑

正如James Henstridge在评论中指出的那样,如果struct{}的地址位于更大的struct中,则它们的地址会更改。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM