github.com/searKing/golang/go@v1.2.74/container/slice/of.go (about) 1 // Copyright 2020 The searKing Author. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package slice 6 7 import ( 8 "reflect" 9 ) 10 11 // Of returns a slice consisting of the elements. 12 // obj: Accept Array、Slice、String(as []byte if ifStringAsRune else []rune) 13 func Of(obj interface{}) []interface{} { 14 return of(obj) 15 } 16 17 type MapPair struct { 18 Key interface{} 19 Value interface{} 20 } 21 22 //of is the same as Of 23 func of(obj interface{}) []interface{} { 24 switch kind := reflect.ValueOf(obj).Kind(); kind { 25 default: 26 // element as a slice of one element 27 out := []interface{}{} 28 out = append(out, obj) 29 case reflect.Array, reflect.Slice: 30 case reflect.Map: 31 out := []interface{}{} 32 v := reflect.ValueOf(obj) 33 keys := v.MapKeys() 34 for _, k := range keys { 35 e := v.MapIndex(k) 36 pair := MapPair{ 37 Key: reflect.Indirect(k).Interface(), 38 Value: reflect.Indirect(e).Interface(), 39 } 40 out = append(out, pair) 41 } 42 return out 43 } 44 45 out := []interface{}{} 46 v := reflect.ValueOf(obj) 47 for i := 0; i < v.Len(); i++ { 48 out = append(out, v.Slice(i, i+1).Index(0).Interface()) 49 } 50 return out 51 }