12345678910111213141516171819202122232425262728293031323334 |
- package model
- import (
- "fmt"
- "reflect"
- "strings"
- )
- // Implode function like php
- func Implode(list interface{}, seq string) string {
- listValue := reflect.Indirect(reflect.ValueOf(list))
- if listValue.Kind() != reflect.Slice {
- return ""
- }
- count := listValue.Len()
- listStr := make([]string, 0, count)
- for i := 0; i < count; i++ {
- v := listValue.Index(i)
- if str, err := getValue(v); err == nil {
- listStr = append(listStr, str)
- }
- }
- return strings.Join(listStr, seq)
- }
- func getValue(value reflect.Value) (res string, err error) {
- switch value.Kind() {
- case reflect.Ptr:
- res, err = getValue(value.Elem())
- default:
- res = fmt.Sprint(value.Interface())
- }
- return
- }
|