[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 快捷鍵