[golang]string及map[string]string型別的封裝
在處理url引數時,你是否會因為要經常將字串型別轉換為其他型別,而感覺到程式碼冗長,麻煩?所以我將自己幾個專案都用到的字串封裝提取了出來,提供大家使用。具體實現非常簡單,可到ofollow,noindex" target="_blank">liamylian/values 檢視,下面給出用法:
import "github.com/liamylian/values" var v values.Value // 設定預設值,如果為空則使用預設值 v = values.Value("") d := v.Default("happy").String() // 空值判斷 v = values.Value("") isEmpty := v.IsEmpty() // 型別轉換 v = values.Value("1") s := v.String() b := v.Bool() f32 := v.Float32() f64 := v.Float64() i := v.Int() u := v.Uint() i8 := v.Int8() u8 := v.Uint8() i16 := v.Int16() u16 := v.Uint16() i32 := v.Int32() u32 := v.Uint32() i64 := v.Int64() u64 := v.Uint64()
除此之外包裡還對map[string]string做了一層封裝,即Values型別。因為底層使用了sync.Map,所以保證了執行緒安全,讀寫不用加鎖。用法如下:
import "github.com/liamylian/values" // 從map建立 m := map[string]Value{"foo": "bar"} vs := values.FromMap(m) // 轉換成map vs.ToMap() // json序列號與反序列化 bytes, _ :=json.Marshal(vs) json.Unmarshal([]byte(`{"foo":"bar","int":1,"bool":true}`), &vs) // 獲取值 value, exists := vs.Get("foo") // 設定值 vs.Set("earth", "moon") // 刪除值 vs.Delete("foo") // 批量設定值 m = map[string]Value{"bar": "foo", "moon":"earth"} vs.Sets(m) // 遍歷 vs.Range(func(key string, value Value) bool { fmt.Println("%s: %s", key, value) return true })