ling-baseling-base

类型转换

ling-base common/convert 模块文档

在线 Playground

在浏览器中直接体验本页相关 API,无需本地安装 Go 环境。

common/convert

Type-safe conversion utilities and format interconversion (JSON / TOML / YAML).

Type Conversion

Convert any value to the target type with clear error messages:

import "github.com/LingByte/ling-base/common/convert"

n, err   := convert.ToInt("42")         // 42, nil
f, err   := convert.ToFloat64("3.14")   // 3.14, nil
b, err   := convert.ToBool("yes")       // true, nil
s, err   := convert.ToString(42)        // "42", nil
d, err   := convert.ToDuration("5s")    // 5 * time.Second, nil

// Slice conversion
ints, err   := convert.ToSlice[int]([]any{1, 2, 3})       // []int{1,2,3}
strs, err   := convert.ToSliceString([]any{"a", "b"})     // []string{"a","b"}

// Map conversion (YAML often returns map[any]any)
m, err := convert.ToMapStringAny(map[any]any{"key": "val"}) // map[string]any{"key":"val"}

Supported types

FunctionFrom
ToIntint, uint, float, string, bool, json.Number
ToInt64same as ToInt + large floats
ToUintsame as ToInt (rejects negative)
ToFloat64float, int, string, bool, json.Number
ToBoolbool, string (true/false/1/0/yes/no/on/off), int
ToStringstring, bool, all numerics, []byte, fmt.Stringer, json.Number, JSON fallback
ToDurationtime.Duration, string ("5s"), int (nanoseconds)
ToSlice[T][]T, []any (element-wise), single value → []T
ToMapStringAnymap[any]any, map[string]any

Format Interconversion

Convert between JSON, TOML, and YAML:

// Direct conversion functions
yamlBytes, err := convert.FromJSONToYAML(jsonBytes)
jsonBytes, err := convert.FromYAMLToJSON(yamlBytes)
tomlBytes, err := convert.FromJSONToTOML(jsonBytes)
jsonBytes, err := convert.FromTOMLToJSON(tomlBytes)
tomlBytes, err := convert.FromYAMLToTOML(yamlBytes)
yamlBytes, err := convert.FromTOMLToYAML(tomlBytes)

// Generic Convert (any → any)
result, err := convert.Convert(convert.FormatJSON, convert.FormatYAML, data)

// Marshal / Unmarshal with explicit format
bytes, err := convert.Marshal(convert.FormatTOML, myStruct)
err = convert.Unmarshal(convert.FormatYAML, data, &myStruct)

// Struct-level helpers
jsonBytes, err := convert.StructToJSON(myStruct)
err = convert.YAMLToStruct(yamlBytes, &myStruct)

TOML note

TOML requires a map or struct at the top level. If you convert a JSON array or scalar to TOML, it is automatically wrapped under a "data" key.

Deep Copy / Clone

// Type-safe deep copy via JSON round-trip
copied, err := convert.Clone(original)

// Generic deep copy (returns any)
copied, err := convert.CopyJSON(original)

// Deep copy that returns zero on error (no error return)
copied := convert.DeepCopy(original)

Map Utilities

// Convert any map to map[string]string
m, err := convert.ToMapStringString(map[string]int{"count": 42})
// → map[string]string{"count": "42"}

// Convert any map to map[string]int
m, err := convert.ToMapStringInt(map[string]string{"count": "42"})
// → map[string]int{"count": 42}

JSON Convenience

// Parse JSON to map
m, err := convert.JSONToMap([]byte(`{"key":"value"}`))

// Parse JSON to slice
s, err := convert.JSONToSlice([]byte(`[1,2,3]`))

// Panic-on-error variants for static data
b := convert.MustMarshal(convert.FormatJSON, data)
convert.MustUnmarshal(convert.FormatJSON, data, &result)

License

MIT

On this page