### 空接口
> 空接口 (interface{})相當于java中的一個基類。可以儲存數字,字符串,結構體,指針等任何類型。不能將空接口賦值到其他類型
```
package main
import "fmt"
// 空接口 i ,%T 輸出類型
func Log(name string, i interface{}) {
fmt.Printf("Name: %s,Type = %T,value = %v\n", name, i, i)
}
func main() {
var v1 interface{} = 1 // 數字
var v2 interface{} = "abc" // 字符串
var v3 interface{} = true // 布爾值
var v4 interface{} = &v1 //指針
var v5 interface{} = struct{ Name string }{"Pony"} //匿名結構體
var v6 interface{} = &v5 //指針
// 空接口取值
var a string = "Hello world!"
var j interface{} = a
var k string = j.(string)
fmt.Println(k)
Log("v1", v1)
Log("v2", v2)
Log("v3", v3)
Log("v4", v4)
Log("v5", v5)
Log("v6", v6)
}
結果:
Hello world!
Name: v1,Type = int,value = 1
Name: v2,Type = string,value = abc
Name: v3,Type = bool,value = true
Name: v4,Type = *interface {},value = 0xc000050230
Name: v5,Type = struct { Name string },value = {Pony}
Name: v6,Type = *interface {},value = 0xc000050240
```
### 空接口的常見使用
> 傳入一個或者多個參數吧
```
package main
import "fmt"
// 空接口傳入多個參數
func Show(args ...interface{}) {
fmt.Println(args...)
}
func main() {
// 聲明一個切片
x := make([]interface{}, 3)
x[0] = 1
x[1] = "abc"
x[2] = struct{ Num int }{1}
// 傳入整個切片
Show(x)
// 傳入單個
Show(x[0])
}
結果:
[1 abc {1}]
1
```
- 安裝開發環境
- 安裝開發環境
- 安裝詳細教程
- 引入包
- Go語言基礎
- 基本變量與數據類型
- 變量
- 數據類型
- 指針
- 字符串
- 代碼總結
- 常量與運算符
- 常量
- 運算符
- 流程控制
- if判斷
- for循環
- switch分支
- goto跳轉
- 斐波那契數列
- Go語言內置容器
- 數組
- 切片
- 映射
- 函數
- 函數(上)
- 函數(中)
- 函數(下)
- 小節
- 包管理
- 結構體
- 結構體(上)
- 結構體(中)
- 結構體(下)
- 小節
- 錯誤處理
- 錯誤處理
- 宕機
- 錯誤應用
- 小節
- 文件操作
- 獲取目錄
- 創建和刪除目錄
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 處理JSON文件
- 接口與類型
- 接口的創建與實現
- 接口賦值
- 接口嵌入
- 空接口
- 類型斷言(1)
- 類型斷言(2)
- 小節
- 并發與通道
- goroutine協程
- runtime包
- 通道channel
- 單向通道channel
- select
- 線程同步
- 多線程的深入學習
- http編程
- http簡介
- Client和Request
- get請求
- post請求
- 模塊函數方法
- 模塊
- fmt庫,模塊
- 項目練習
- 爬蟲:高三網
- 爬蟲:快代理
- 爬蟲:快代理2
- 多線程:通道思路
- 多線程爬蟲:快代理