Go语言常用类型互转方法归纳
2024-01-07 18:30:06
前言
前文提到,Go基本数据类型有如下这些
布尔:bool
字符串:string
整数:
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64
字节:byte ,uint8 的别名
Unicode:rune ,int32 的别名
浮点:float32 float64
复数:complex64 complex128
日常使用中,除此之外还会涉及到如Json-Struct、string-time等情况的转换,因此本文将对日常使用中所用到的类型转换做一个归纳。
使用强制转换
诸如int于float64类型这样的基本数据类型,直接使用强制转换即可。
例如: int类型转换为float64类型
var a int = 10
var b float64 = float64(a)
float64类型转换为int类型
var x float64 = 3.14
var y int = int(x)
使用强大的Strconv库
此部分见我上一篇学习笔记
Json-struct
Json格式通常用于消息的传输,比如kafka消息发送。一般接收后/发送前都需要将json格式和struct互转。
可以通过json.Marshal
将结构体转为[]byte的json格式内容。
通过json.Unmarshal
将json解析为结构体的内容。
json.Marshal
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
p := Person{Name: "Alice", Age: 30}
jsonData, err := json.Marshal(p)
if err != nil {
// 错误处理
}
fmt.Println(string(jsonData))
json.Unmarshal
var p Person
jsonStr := `{"name":"Bob","age":25}`
err := json.Unmarshal([]byte(jsonStr), &p)
if err != nil {
// 错误处理
}
fmt.Println(p.Name, p.Age)
Time-string-Unix
涉及到Time
有三种,分别是:字符串、Time和时间戳。时间戳就是指从1970年01月01日00时00分00秒
开始到现在经过的秒数。
Time转为其他
t := time.Now()
unixTime := t.Unix() // 将time转换为Unix时间戳
strTime := t.Format("2006-01-02 15:04:05") // 将time转换为字符串
Unix转为其他
unixTime := int64(1609459200) // 举例:Unix时间戳
t := time.Unix(unixTime, 0) // 将Unix时间戳转换为time
strTime := time.Unix(unixTime, 0).Format("2006-01-02 15:04:05") // 将Unix时间戳转换为字符串
字符串转为其他
strTime := "2023/01/01 12:00:00" // 时间字符串
layout := "2006/01/02 15:04:05" // 定义时间格式的布局
t, err := time.Parse(layout, strTime) // 将字符串转换为time
if err != nil {
// 错误处理
}
unixTime := t.Unix() // 将字符串转换为Unix时间戳
其中这里使用layout指定处理模式,比如strTime是2023--01-01_12:00:00
,这个格式很奇葩且肯定不符合规范,那就给layout也这个格式,这样才可以解析。
文章来源:https://blog.csdn.net/Ws_Te47/article/details/135391676
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!