• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go 格式转换

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

#string到int
int,err:=strconv.Atoi(string)

#string到int64
int64, err := strconv.ParseInt(string, 10, 64)

#int到string
string:=strconv.Itoa(int)

#int64到string
string:=strconv.FormatInt(int64,10)

string、[]byte转换

string转[]byte

var str string = "test"

var data []byte = []byte(str)

[]byte转string

var data [10]byte 

byte[0] = 'T'

byte[1] = 'E'

var str string = string(data[:])

struct转map

使用json模块

直接使用json.Marshal方法来强制转化struct。

func JSONMethod(content interface{}) map[string]interface{} {
    var name map[string]interface{}
    if marshalContent, err := json.Marshal(content); err != nil {
        fmt.Println(err)
    } else {
        d := json.NewDecoder(bytes.NewReader(marshalContent))
        d.UseNumber() // 设置将float64转为一个number
        if err := d.Decode(&name); err != nil {
            fmt.Println(err)
        } else {
            for k, v := range name {
                name[k] = v
            }
        }
    }
    return name
}

使用reflect

通过reflect模块来获取结构体的key值和value值,然后直接进行组装。这种方法不能识别结构体中的tag,所以无法兼容首字母小写,而其他字母存在大写的情况.

func ReflectMethod(obj interface{}) map[string]interface{} {
    t := reflect.TypeOf(obj)
    v := reflect.ValueOf(obj)

    var data = make(map[string]interface{})
    for i := 0; i < t.NumField(); i++ {
        data[strings.ToLower(t.Field(i).Name)] = v.Field(i).Interface()
    }
    return data
}

使用第三方库

github.com/fatih/structs,他提供了比较丰富的函数,让我们可以像python中一样轻松的获取所有的key值(structs.Names(server)),所有的value值(structs.Values(server)),甚至直接进行类型判断(structs.IsZero(server))等等。

更详细的信息可以查阅:https://github.com/fatih/structs

type Human struct {
    Name     string `json:"name"`
    Age      int    `json:"age"`
    Profile  string `structs:"profile"`
    IsGopher bool   `json:"isGopher"`
}

func main() {
    human := Human{"Detector", 18, "A tester", true}
    fmt.Println("Json method:", JSONMethod(human))
    fmt.Println("========")
    fmt.Println("Reflect method:", ReflectMethod(human))
    fmt.Println("========")
    fmt.Println("Third lb:", structs.Map(human))
}

从测试结果可以看到,三种方式都能完成struct转map,但是reflect方法无法识别结构体中的tag,第三方库只能使用tag structs,所以如果考虑兼容性(考虑到协同开发)和尽量使用官方库的原则,推荐使用第一种方法(json转换)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
goimport自动删除未引用的库发布时间:2022-07-10
下一篇:
Go语言学习笔记(三)数组&amp;切片&amp;map发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap