支持Map类型的包装 #6
							
								
								
									
										37
									
								
								map.go
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								map.go
									
									
									
									
									
								
							| @ -9,6 +9,7 @@ package wrapper | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"reflect" | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| @ -38,7 +39,7 @@ func (m *Map) rUnlock() { | ||||
| // | ||||
| // Date : 18:34 2024/11/6 | ||||
| func (m *Map) Exist(key string) bool { | ||||
| 	if nil == m { | ||||
| 	if m.IsNil() { | ||||
| 		return false | ||||
| 	} | ||||
| 	m.rLock() | ||||
| @ -58,7 +59,7 @@ func (m *Map) Exist(key string) bool { | ||||
| // | ||||
| // Date : 15:16 2024/11/19 | ||||
| func (m *Map) Set(field string, value any) error { | ||||
| 	if nil == m { | ||||
| 	if m.IsNil() { | ||||
| 		return errors.New("Map is nil") | ||||
| 	} | ||||
| 	m.lock() | ||||
| @ -67,13 +68,39 @@ func (m *Map) Set(field string, value any) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Del 删除指定的字段 | ||||
| // | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 15:21 2024/11/19 | ||||
| func (m *Map) Del(field string) { | ||||
| 	if m.IsNil() { | ||||
| 		return | ||||
| 	} | ||||
| 	m.lock() | ||||
| 	defer m.unlock() | ||||
| 	delete(*m, field) | ||||
| } | ||||
|  | ||||
| // IsNil 判断map是否为nil | ||||
| // | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 15:22 2024/11/19 | ||||
| func (m *Map) IsNil() bool { | ||||
| 	if nil == m { | ||||
| 		return true | ||||
| 	} | ||||
| 	return reflect.ValueOf(*m).IsNil() | ||||
| } | ||||
|  | ||||
| // Get ... | ||||
| // | ||||
| // Author : go_developer@163.com<白茶清欢> | ||||
| // | ||||
| // Date : 14:41 2024/11/19 | ||||
| func (m *Map) Get(field string) (any, error) { | ||||
| 	if nil == m { | ||||
| 	if m.IsNil() { | ||||
| 		return nil, errors.New("map is nil") | ||||
| 	} | ||||
| 	m.rLock() | ||||
| @ -97,7 +124,7 @@ func (m *Map) Get(field string) (any, error) { | ||||
| // | ||||
| // Date : 14:59 2024/11/19 | ||||
| func (m *Map) GetDefault(field string, defaultValue any, allowNil bool) any { | ||||
| 	if nil == m { | ||||
| 	if m.IsNil() { | ||||
| 		return defaultValue | ||||
| 	} | ||||
| 	m.rLock() | ||||
| @ -135,7 +162,7 @@ func (m *Map) Value() Map { | ||||
| // Date : 19:40 2024/11/6 | ||||
| func (m *Map) Clone() Map { | ||||
| 	newData := map[string]any{} | ||||
| 	if nil == m { | ||||
| 	if m.IsNil() { | ||||
| 		return newData | ||||
| 	} | ||||
| 	m.rLock() | ||||
|  | ||||
| @ -19,3 +19,12 @@ func TestMap_Exist(t *testing.T) { | ||||
| 	fmt.Println(testData.Exist("name")) | ||||
| 	fmt.Println(testData.Exist("age")) | ||||
| } | ||||
|  | ||||
| func TestMap_IsNil(t *testing.T) { | ||||
| 	var ( | ||||
| 		m  Map | ||||
| 		m1 *Map | ||||
| 	) | ||||
| 	fmt.Println(m.Set("a", 1)) | ||||
| 	fmt.Println(m.IsNil(), m1.IsNil()) | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user