猿问

为什么只使用新函数来创建相同结构的两个指针在 go 中相等

我想比较同一结构的 2 个实例,以确定它是否相等,并得到两个不同的结果。

  1. 注释代码 // fmt.Println("%#v\n", a),程序输出为“Equal”

  2. 使用 fmt 打印变量“a”,然后我得到输出“Not Equal”

请帮我找出原因???

我使用 golang 1.2.1


package main


import (

    "fmt"

)


type example struct {

}


func init() {

   _ = fmt.Printf

}


func main() {


    a := new(example)

    b := new(example)


    // fmt.Println("%#v\n", a)

    if a == b { 

        println("Equals")

    } else {

        println("Not Equals")

    }   

}


慕桂英4014372
浏览 203回答 1
1回答

qq_遁去的一_1

这里涉及到几个方面:您通常无法通过比较指针来比较结构的值:a并且b是指向examplenot 实例的指针。a==b比较指针(即内存地址)而不是值。不幸的example是,您是空结构体struct{},对于一个且唯一的空结构体而言,一切都不同,因为它并不真正存在,因为它不占用空间,因此所有不同的结构struct {}可能(也可能不)具有相同的地址。所有这些都与调用 fmt.Println 无关。空结构体的特殊行为只是通过 fmt.Println 完成的反射表现出来。只是不要struct {}用于测试任何真实结构的行为方式。
随时随地看视频慕课网APP

相关分类

Go
我要回答