这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战
一、基础篇
7. 类型转换
(1)字符串转数字
// string -> int
intVal, err := strconv.Atoi("32")
fmt.Printf("%000d | %+v \n", intVal, err)
/* 输出:
32 | <nil>
*/
// string -> int64
int64Val, err := strconv.ParseInt("233233", 10, 64)
fmt.Printf("%d | %+v \n", int64Val, err)
/* 输出:
233233 | <nil>
*/
// string -> uint64
uintVal, err := strconv.ParseUint("38479823", 10, 64)
fmt.Printf("%d | %+v \n", uintVal, err)
uintVal, err = strconv.ParseUint("-38479823", 10, 64)
fmt.Printf("%d | %+v \n", uintVal, err)
/* 输出:
38479823 | <nil>
0 | strconv.ParseUint: parsing "-38479823": invalid syntax
*/
// string -> float64
floatVal, err := strconv.ParseFloat("3.14159", 64)
fmt.Printf("%.3f | %+v \n", floatVal, err)
/* 输出:
3.141 | <nil>
*/
(2)数字转字符串
- 浮点数的解析主要区别在于第二个参数,常用到的是 E/e(科学计数法)或 G/g。
// int -> string
fmt.Printf("%s \n", strconv.Itoa(101))
// int64 -> string
fmt.Printf("%s \n", strconv.FormatInt(int64(234), 10))
// uint64 -> string
fmt.Printf("%s \n", strconv.FormatUint(uint64(520), 10))
// float64 -> string
fmt.Printf("%s \n", strconv.FormatFloat(3.14159, 'E', -1, 64))
fmt.Printf("%s \n", strconv.FormatFloat(3.14159, 'g', -1, 64))
/* 输出:
3.14159E+00
3.14159
*/
(3)字符串、布尔值互转
- 支持大小写,前后不能有其他字符如空格也不行。
- 支持简写即 T 或 F。
- 其他一律解析报错。
// string -> bool
// 支持大小写, 前后不得有空格
boolVal, err := strconv.ParseBool("true")
fmt.Printf("%t | %+v \n", boolVal, err)
boolVal, err = strconv.ParseBool("FALSE")
fmt.Printf("%t | %+v \n", boolVal, err)
/* 输出:
true | <nil>
false | <nil>
*/
// 支持简写 T/F
boolVal, err = strconv.ParseBool("T")
fmt.Printf("%t | %+v \n", boolVal, err)
boolVal, err = strconv.ParseBool("F")
fmt.Printf("%t | %+v \n", boolVal, err)
/* 输出:
true | <nil>
false | <nil>
*/
// 其他一律报错
boolVal, err = strconv.ParseBool("ANY")
fmt.Printf("%t | %+v \n", boolVal, err)
/* 输出:
false | strconv.ParseBool: parsing "ANY": invalid syntax
*/
(4)format占位符
| 占位符 | 适用类型 | 备注 |
|---|---|---|
| %v | interface{} | 仅按序显示属性值 |
| %+v | interface{} | 同时显示属性名 |
| %#v | interface{} | 再附加显示结构体代码路径 |
| %T | interface{} | 显示类型的名称 |
| %t | bool | 布尔类型 |
| %d | int / uint / ... | 十进制数值 |
| %b | int / uint / ... | 二进制数值 |
| %x | int / uint / ... | 十六进制数值 |
| %c | int / uint / ... | 整数对应字符 |
| %f | float32 / float64 | 浮点数十进制数值 |
| %e / %E | int / float32 / ... | 科学计数法表示,如 1.2e+07 |
| %s | string | 字符串 |
| %q | string | 字符串带双引号 |
| %p | interface{} | 指针的值(地址) |
(5)时间格式化
// YYYY-MM-DD hh:mm:ss.(micro seconds)
fmt.Printf("%s", time.Now().Format("2006-01-02 15:04:05.000000"))
// 月份, 星期几
fmt.Printf("%s", time.Now().Format("Mon | Monday"))