[TOC]
## 基础类型转换
> 普通变量类型int,float 都可以使用 type (a)这种形式来进行强制类型转换
> string与其他基础类型之间的转换使用strconv包
~~~
var a int32 = 10
var b int64 = int64(a)
var c float32 = 12.3
var d float64 =float64(c)
~~~
## 字符串相关转换 (strconv)
> 与字符串转换相关的操作,使用strconv包,比如 int/float/bool与字符串的相互转换
> string到具体的数值,要判断err是否为nil之后,才可以使用
### string与int互转
~~~
// string 转 int
intval, err := strconv.Atoi("1")
if err == nil {
fmt.Printf("%d:type is %T\n", intval, intval)
}
// int 转 string
var num int = 1
str := strconv.Itoa(num)
//str := strconv.FormatInt(int64(num), 10)
fmt.Printf("%s:type is %T\n", str, str)
~~~
### string与int64互转
~~~
// string 转 int64
// 参数2:基于几进制,值可以是2,8,10,16 ,分别对应 二进制,八进制,十进制,十六进制
// 参数3:要转成哪个int类型:可以是0、8、16、32、64,分别对应 int,int8,int16,int32,int64
int64val, err := strconv.ParseInt("11222", 10, 64)
if err == nil {
fmt.Printf("%d:type is %T\n", int64val, int64val)
}
// int64 转 string,=> FormatInt()方式
var num int64 = 1
str := strconv.FormatInt(int64(num), 10)
fmt.Printf("%s:type is %T\n", str, str)
// int64 转 string,=> Sprintf()方式
str2 := fmt.Sprintf("%d", 12)
fmt.Printf("%s:type is %T\n", str2, str2)
~~~
### string与float64互转
~~~
// string转成float64
// 参数2:指定浮点类型(32:float32、64:float64),好像该参数不起作用,最终都是返回的float64,以后尽量用float64吧
float64val, err := strconv.ParseFloat("11", 32)
if err == nil {
fmt.Printf("%f:type is %T\n", float64val, float64val)
}
// float64 转 string,=> FormatInt()方式
// func FormatFloat(f float64, fmt byte, prec, bitSize int) string
// 第2个参数`fmt表示格式`:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制)、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、'g'(指数很大时用'e'格式,否则'f'格式)、'G'(指数很大时用'E'格式,否则'f'格式)
// 第3个参数`prec表示控制精度`:对'f'、'e'、'E',它表示小数点后的数字个数;对'g'、'G',它控制总的数字个数。如果prec 为-1,则为不控制小数点精度
// 第3个参数`prec表示位数`:共32与64两个选择
var num float32 = 12.33333558
str := strconv.FormatFloat(float64(num), 'f', 1, 32) // float32=> 保留1位小数点
//str := strconv.FormatFloat(float64(num), 'f', 1, 64) // float64
fmt.Printf("%s:type is %T\n", str, str)
// float64 转 string,=> Sprintf()方式
str2 := fmt.Sprintf("%.6f", num)
fmt.Printf("%s:type is %T\n", str2, str2)
~~~
### string与bool互转
~~~
// string转成bool
boolval, err := strconv.ParseBool("true")
if err == nil {
fmt.Printf("%t:type is %T\n", boolval, boolval)
}
// bool 转 string,=> FormatInt()方式
str := strconv.FormatBool(true)
fmt.Printf("%s:type is %T\n", str, str)
// bool 转 string,=> Sprintf()方式
str2 := fmt.Sprintf("%t", true)
fmt.Printf("%s:type is %T\n", str2, str2)
~~~
## 类型断言
### 类型断言
~~~
package main
import "fmt"
func main() {
var a interface{} =10
switch a.(type){
case int:
fmt.Println("int")
case float32:
fmt.Println("string")
}
}
~~~
### 断言方式类型转换
~~~
package main
import "fmt"
func main() {
var a interface{} = 10
t, ok := a.(int)
if ok {
fmt.Println("int", t)
}else {
fmt.Println("format1 failed")
}
t2, ok := a.(float32)
if ok {
fmt.Println("float32", t2)
} else {
fmt.Println("format2 failed")
}
}
~~~
- 基础知识
- 开发环境
- 包名规则
- 包初始化 (init)
- 基础数据类型
- 基础类型转换
- 格式化输出
- go指针
- 流程控制语句
- 函数定义
- 匿名函数
- 数组和切片
- map集合
- 结构体
- Interface接口
- 日期处理
- 数学计算
- 正则表达式
- 协程 (并发处理)
- channel
- waitgroup
- mutex (锁机制)
- websocket
- protobuf
- Redis
- 错误处理
- 打包程序
- NSQ消息队列
- 单元测试
- beego
- 安装入门
- Gin
- 快速入门
- 路由与控制器
- 处理请求参数
- 表单验证
- 处理响应结果
- 渲染HTML模版
- 访问静态文件
- Gin中间件
- Cookie处理
- Session处理
- Gin上传文件
- swagger
- pprof性能测试
- GORM
- 入门教程
- 模型定义
- 数据库连接
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 事务处理
- 关联查询
- 属于 (BELONG TO)
- 一对一 (Has One)
- 一对多 (Has Many)
- 多对多 (Many to Many)
- 预加载 (Preloading)
- 错误处理
- 第三方常用插件
- viper 读取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷键