Browse Source

添加函数

yjp 1 năm trước cách đây
mục cha
commit
d081887176
2 tập tin đã thay đổi với 50 bổ sung6 xóa
  1. 19 3
      maputils/maputils.go
  2. 31 3
      maputils/maputils_test.go

+ 19 - 3
maputils/maputils.go

@@ -10,15 +10,15 @@ const (
 	pathSeparator = "."
 )
 
-func FindValueInMap(find map[string]any, path string) (any, error) {
-	if find == nil || strings.TrimSpace(path) == "" {
+func GetValueInMap(m map[string]any, path string) (any, error) {
+	if m == nil || strings.TrimSpace(path) == "" {
 		return nil, errors.New("没有传递需要查找的数据或路径")
 	}
 
 	var retValue any
 	var currentFind any
 
-	currentFind = find
+	currentFind = m
 	pathParts := strings.Split(path, pathSeparator)
 	for _, pathPart := range pathParts {
 		if strings.HasPrefix(pathPart, "[") && strings.HasSuffix(pathPart, "]") {
@@ -71,3 +71,19 @@ func FindValueInMap(find map[string]any, path string) (any, error) {
 
 	return retValue, nil
 }
+
+func GetValue[K comparable, V any](m map[K]any, key K) (V, bool) {
+	var zeroValue V
+
+	mapValue, ok := m[key]
+	if !ok {
+		return zeroValue, false
+	}
+
+	v, ok := mapValue.(V)
+	if !ok {
+		return zeroValue, false
+	}
+
+	return v, true
+}

+ 31 - 3
maputils/maputils_test.go

@@ -2,7 +2,7 @@ package maputils
 
 import "testing"
 
-func TestFindValueInMap(t *testing.T) {
+func TestGetValueInMap(t *testing.T) {
 	testMap := map[string]any{
 		"foo1": map[string]any{
 			"foo1_sub": []any{
@@ -11,7 +11,7 @@ func TestFindValueInMap(t *testing.T) {
 		},
 	}
 
-	value, err := FindValueInMap(testMap, "foo1.foo1_sub.[0]")
+	value, err := GetValueInMap(testMap, "foo1.foo1_sub.[0]")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -20,7 +20,7 @@ func TestFindValueInMap(t *testing.T) {
 		t.Fatal("值不一致")
 	}
 
-	value, err = FindValueInMap(testMap, "foo1.foo1_sub.[1]")
+	value, err = GetValueInMap(testMap, "foo1.foo1_sub.[1]")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -29,3 +29,31 @@ func TestFindValueInMap(t *testing.T) {
 		t.Fatal("值不一致")
 	}
 }
+
+func TestGetValue(t *testing.T) {
+	testMap := map[string]any{
+		"foo1": map[string]any{
+			"foo1_sub": []any{
+				"value1", 2,
+			},
+		},
+	}
+
+	foo1Map, ok := GetValue[string, map[string]any](testMap, "foo1")
+	if !ok {
+		t.Fatal("取foo1值失败")
+	}
+
+	foo1Sub, ok := GetValue[string, []any](foo1Map, "foo1_sub")
+	if !ok {
+		t.Fatal("取foo1Sub值失败")
+	}
+
+	if foo1Sub[0].(string) != "value1" {
+		t.Fatal("值不一致")
+	}
+
+	if foo1Sub[1].(int) != 2 {
+		t.Fatal("值不一致")
+	}
+}