前文提到,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)
此部分见我上一篇学习笔记
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
有三种,分别是:字符串、Time和时间戳。时间戳就是指从1970年01月01日00时00分00秒
开始到现在经过的秒数。
t := time.Now()
unixTime := t.Unix() // 将time转换为Unix时间戳
strTime := t.Format("2006-01-02 15:04:05") // 将time转换为字符串
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也这个格式,这样才可以解析。