Golang编程(基础篇二)

200 阅读2分钟

这是我参与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)数字转字符串

  1. 浮点数的解析主要区别在于第二个参数,常用到的是 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)字符串、布尔值互转

  1. 支持大小写,前后不能有其他字符如空格也不行。
  2. 支持简写即 T 或 F。
  3. 其他一律解析报错。
// 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占位符

占位符适用类型备注
%vinterface{}仅按序显示属性值
%+vinterface{}同时显示属性名
%#vinterface{}再附加显示结构体代码路径
%Tinterface{}显示类型的名称
%tbool布尔类型
%dint / uint / ...十进制数值
%bint / uint / ...二进制数值
%xint / uint / ...十六进制数值
%cint / uint / ...整数对应字符
%ffloat32 / float64浮点数十进制数值
%e / %Eint / float32 / ...科学计数法表示,如 1.2e+07
%sstring字符串
%qstring字符串带双引号
%pinterface{}指针的值(地址)

(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"))