### 空接口
> 空接口 (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
- 多线程:通道思路
- 多线程爬虫:快代理