package smscli import ( "fmt" "net/url" ) // buildQuery 将 map[string]interface{} 转成 url.Values。 // // nil / 空字符串 / 值为 0 的 int/uint 会被忽略; // int8 不做零值过滤(0 可能是合法状态值); // 指针类型为 nil 时忽略,否则取值写入。 func buildQuery(params map[string]interface{}) url.Values { q := url.Values{} for k, v := range params { if v == nil { continue } switch val := v.(type) { case string: if val != "" { q.Set(k, val) } case int: if val != 0 { q.Set(k, fmt.Sprintf("%d", val)) } case int8: q.Set(k, fmt.Sprintf("%d", val)) case uint: if val != 0 { q.Set(k, fmt.Sprintf("%d", val)) } case *int: if val != nil { q.Set(k, fmt.Sprintf("%d", *val)) } case *int8: if val != nil { q.Set(k, fmt.Sprintf("%d", *val)) } case *uint: if val != nil { q.Set(k, fmt.Sprintf("%d", *val)) } default: q.Set(k, fmt.Sprintf("%v", v)) } } return q } func paginationParams(p PaginationQuery) map[string]interface{} { m := map[string]interface{}{} if p.Page > 0 { m["page"] = p.Page } if p.PageSize > 0 { m["page_size"] = p.PageSize } return m } func mergeParams(maps ...map[string]interface{}) map[string]interface{} { result := map[string]interface{}{} for _, m := range maps { for k, v := range m { result[k] = v } } return result }