3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
package main
import "fmt"
func main() {
? ? i := 32
? ? j := 32
? ? fmt.Printf("%p is %p\n", &i, &i)
? ? fmt.Printf("%p is not %p\n", &i, &j)
}
輸出:
0xc000016100 is 0xc000016100
0xc000016100 is not 0xc000016108
游樂(lè)場(chǎng):https://play.golang.org/p/nXAEJeImeXa
然而,
package main
import "fmt"
func main() {
? ? i := 32
? ? j := 32
? ? fmt.Printf("i %p is i %p; i == i %t\n", &i, &i, &i == &i)
? ? fmt.Printf("i %p is not j %p; i == j %t\n", &i, &j, &i == &j)
? ? fmt.Println()
? ? var v struct {
? ? ? ? i struct{}
? ? ? ? j struct{}
? ? }
? ? fmt.Printf("i %p is i %p; i == i %t\n", &v.i, &v.i, &v.i == &v.i)
? ? fmt.Printf("i %p is not j %p; i == j %t\n", &v.i, &v.j, &v.i == &v.j)
}
輸出:
i 0x40e020 is i 0x40e020; i == i true
i 0x40e020 is not j 0x40e024; i == j false
i 0x1e52bc is i 0x1e52bc; i == i true
i 0x1e52bc is not j 0x1e52bc; i == j true
游樂(lè)場(chǎng):https://play.golang.org/p/Wv814ZgPCul
封裝CMP
import?"github.com/google/go-cmp/cmp"cmp 包確定值的相等性。
該包旨在成為 Reflect.DeepEqual 的更強(qiáng)大、更安全的替代方案,用于比較兩個(gè)值在語(yǔ)義上是否相等。

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用 CPython,id返回內(nèi)存中對(duì)象的地址。在 Go 中,您可以通過(guò) & 符號(hào)獲取指向?qū)ο蟮闹羔槪?/p>
package main
import "fmt"
func main() {
i := 32
j := 32
fmt.Printf("%p is %p\n", &i, &i)
fmt.Printf("%p is not %p\n", &i, &j)
}
上面示例的輸出在我的機(jī)器上如下所示:
0xc000016100 is 0xc000016100
0xc000016100 is not 0xc000016108

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以用來(lái)DeepEqual
比較兩個(gè)對(duì)象的內(nèi)容。但是,我不認(rèn)為 python 就是id
這么做的。從 python 中的定義來(lái)看id
,您所追求的似乎是指針等效,而不是DeepEqual
. id
狀態(tài)的函數(shù)定義
這是一個(gè)整數(shù),保證該對(duì)象在其生命周期內(nèi)是唯一且恒定的。
如果要比較兩個(gè)指針值,則可以簡(jiǎn)單地使用==
:如果兩個(gè)指針指向同一對(duì)象,則它們相等。如果兩個(gè)指針值不相等,它們?nèi)匀豢赡苤赶蚓哂邢嗤瑑?nèi)容的對(duì)象,因此p1==p2
可能為假,但DeepEqual(*p1,*p2)
也可能為真。
- 3 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)