Go语言常用类型互转方法归纳

发布时间:2024年01月04日

前言

前文提到,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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。