1. 程式人生 > 程式設計 >go 判斷兩個 slice/struct/map 是否相等的例項

go 判斷兩個 slice/struct/map 是否相等的例項

可以通過 reflect.DeepEqual 比較兩個 slice/struct/map 是否相等:

package main 
import (
 "fmt"
 "reflect"
)
 
type A struct {
 s string
}
 
func main() {
 
 a1 := A{s: "abc"}
 a2 := A{s: "abc"}
 if reflect.DeepEqual(a1,a2) {
  fmt.Println(a1,"==",a2)
 }
 
 b1 := []int{1,2}
 b2 := []int{1,2}
 if reflect.DeepEqual(b1,b2) {
  fmt.Println(b1,b2)
 }
 
 c1 := map[string]int{"a": 1,"b": 2}
 c2 := map[string]int{"a": 1,"b": 2}
 if reflect.DeepEqual(c1,c2) {
  fmt.Println(c1,c2)
 }
}

補充:go語言判斷 slice,array,map中是否存在某個元素

最近在用go重構以前python寫的專案。遇到一些問題,總結一下。自己水平比較菜,遇到問題較低階,自己總結一下,免得忘了

很簡單的需求,判斷某個元素是否在 slice,map中 。其實很簡單。但是還是python最簡單啊。。。。。。。

func Contain(obj interface{},target interface{}) (bool,error) {
 targetValue := reflect.ValueOf(target)
 switch reflect.TypeOf(target).Kind() {
 case reflect.Slice,reflect.Array:
 for i := 0; i < targetValue.Len(); i++ {
 if targetValue.Index(i).Interface() == obj {
 return true,nil
 }
 }
 case reflect.Map:
 if targetValue.MapIndex(reflect.ValueOf(obj)).IsValid() {
 return true,nil
 }
 } 
 return false,errors.New("not in array")
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。