Golang中的struct比較

2021-10-05 23:14:45 字數 2048 閱讀 2493

可比較的資料型別除了上述三種外,還有boolean,complex,pointer,channel,inte***ce和array

不可比較的資料型別包括,slice, map, 和function

不包含不可比較的成員變數

reflect.deepequal函式,指標和例項均可以比較(無論有沒有包含不可比較的成員變數)

package main

import (

"fmt"

"reflect"

)type t1 struct

func main() ,

ptr: new(int),

slice: int,

map1: make(map[string]string, 0),

} t2 := t1,

ptr: new(int),

slice: int,

map1: make(map[string]string, 0),

} // 報錯 例項不能比較 invalid operation: t1 == t2 (operator == not defined on t1)

// fmt.println(t1 == t2)

// 指標可以比較

fmt.println(&t1 == &t2) // false

fmt.println(reflect.deepequal(t1, t2)) // true

t3 := &t1,

ptr: new(int),

slice: int,

map1: make(map[string]string, 0),

} t4 := &t1,

ptr: new(int),

slice: int,

map1: make(map[string]string, 0),

} fmt.println(t3 == t4) // false

fmt.println(reflect.deepequal(t3, t4)) // true

fmt.printf("%p, %p \n", t3, t4) // 0xc000046050, 0xc0000460a0

fmt.printf("%p, %p \n", &t3, &t4) // 0xc000006030, 0xc000006038

// 前面加*,表示指標指向的值,即結構體例項,不能用==

// invalid operation: *t3 == *t4 (operator == not defined on t1)

// fmt.println(*t3 == *t4)

t5 := t3

fmt.println(t3 == t5) // true

fmt.println(reflect.deepequal(t3, t5)) // true

fmt.printf("%p, %p \n", t3, t5) // 0xc000046050, 0xc000046050

fmt.printf("%p, %p \n", &t3, &t5) // 0xc000006030, 0xc000006040

}

package main

import (

"fmt"

)type t2 struct

type t3 struct

func main()

package main

import (

"fmt"

"reflect"

)type t2 struct

type t3 struct

func main()

package main

import (

"fmt"

)type t1 struct

type t2 struct

func main()

golang中struct和 byte的相互轉換

在網路傳輸過程中,經常會這樣處理 socket接收到資料,先獲取其訊息頭,然後再做各種不同的業務處理。在解析訊息頭的時候的方法有多種多樣。其中最為高效解析訊息頭的方法就是直接把資料頭部分強制型別轉換為對應的訊息頭結構體。這種做法在c c 中非常的常見。而golang其實也是可以這樣子做的。類似這樣的...

golang中json和struct的使用

在struct的字段後面加入json key 可以進行json格式輸出,其中key為json的鍵名 響應的結果為 1.如果struct的某個字段沒有傳值,則輸出的json為預設值,可以通過 omitempty 引數忽略掉值為空的鍵 type mydata struct data mydata suc...

Golang中struct結構標籤 Tag 的使用

在看別人的一些 時,宣告結構時有個json name是做什麼用的?想知道原因得了解下 在golang中,命名都是推薦都是用駝峰方式,並且在首字母大小寫有特殊的語法含義 包外無法引用。但是由經常需要和其它的系統進行資料互動,例如轉成json格式,儲存到redis等等。這個時候如果直接用屬性名來作為鍵值...