github.com/alibabacloud-go/tea@v1.3.10/dara/map.go (about)

     1  package dara
     2  
     3  import (
     4  	"reflect"
     5  )
     6  
     7  type Entry struct {
     8  	Key   string
     9  	Value interface{}
    10  }
    11  
    12  // toFloat64 converts a numeric value to float64 for comparison
    13  func Entries(m interface{}) []*Entry {
    14  	v := reflect.ValueOf(m)
    15  	if v.Kind() != reflect.Map {
    16  		panic("Entries: input must be a map")
    17  	}
    18  
    19  	entries := make([]*Entry, 0, v.Len())
    20  	for _, key := range v.MapKeys() {
    21  		// 确保 Key 是字符串类型
    22  		if key.Kind() != reflect.String {
    23  			panic("Entries: map keys must be of type string")
    24  		}
    25  
    26  		value := v.MapIndex(key)
    27  		entries = append(entries, &Entry{
    28  			Key:   key.String(),
    29  			Value: value.Interface(),
    30  		})
    31  	}
    32  	return entries
    33  }
    34  
    35  func KeySet(m interface{}) []string {
    36  	v := reflect.ValueOf(m)
    37  	if v.Kind() != reflect.Map {
    38  		panic("KeySet: input must be a map")
    39  	}
    40  
    41  	keys := make([]string, 0, v.Len())
    42  	for _, key := range v.MapKeys() {
    43  		if key.Kind() != reflect.String {
    44  			panic("KeySet: map keys must be of type string")
    45  		}
    46  		keys = append(keys, key.String())
    47  	}
    48  	return keys
    49  }