## 一、定義

## 二、實例
~~~
package main
import "fmt"
// 定義接口
type demo1 interface {
//定義方法
Fun01()
}
// 結構體
type User struct {
Name string
Age int
}
type User2 struct {
Name string
Age int
}
func (u *User)Fun01() {
fmt.Printf("一、%s的年齡為%d\n",u.Name,u.Age)
}
func (u2 *User2)Fun01() {
fmt.Printf("二、%s的年齡為%d\n",u2.Name,u2.Age)
}
//自定義類型中使用
type mysay string
func (m mysay) Fun01() {
fmt.Printf("人生無常大娃套小娃的是%s\n",m)
}
//演示多態
//參數為接口類型
func WhoSay(h *User){
h.Fun01()
}
func main() {
u1 := &User{"二哈",20}
u2 := &User2{"大哈",22}
var str mysay = "猜猜看"
u1.Fun01()
u2.Fun01()
str.Fun01()
// 多態
//WhoSay(u1)
//WhoSay(u2)
//WhoSay(str)
}
~~~
## 三、接口繼承
~~~
package main
import "fmt"
//定義接口
type Humaner interface {
//方法
Say()
}
type Personer interface {
//相當于寫了Say()
Humaner
//唱歌
Sing(lyrics string)
}
type Student struct {
name string
score int
}
func (s *Student) Say() {
fmt.Printf("Student[%s,%d] 瞌睡不斷\n", s.name, s.score)
}
func (s *Student) Sing(lyrics string) {
fmt.Printf("Student sing[%s]!!\n", lyrics)
}
func main() {
s := &Student{"學生", 88}
//調Personner方法
var p Personer
p = s
p.Say()
p.Sing("aaa")
}
~~~
## 四、comma-ok斷言
~~~
package main
import "fmt"
//空接口
type Element interface{}
type Person struct {
name string
age int
}
func main() {
//3容量的切片
list := make([]Element, 3)
list[0] = 1 //int
list[1] = "Hello" //string
list[2] = Person{"zhangsan", 18}
for index, element := range list {
//類型斷言:value,ok = element.(T)
if value, ok := element.(int); ok {
fmt.Printf("list[%d] 是int類型,值是 %d\n", index, value)
} else if value, ok := element.(string); ok {
fmt.Printf("list[%d] 是string類型,值是 %s\n", index, value)
} else {
fmt.Printf("list[%d] 是其他類型\n", index)
}
}
}
~~~
運行結果:
list[0] 是int類型,值是 1
list[1] 是string類型,值是 Hello
list[2] 是其他類型
## 五、switch
~~~
package main
import "fmt"
//空接口
type Element interface{}
type Person struct {
name string
age int
}
func main() {
//3容量的切片
list := make([]Element, 3)
list[0] = 1 //int
list[1] = "Hello" //string
list[2] = Person{"zhangsan", 18}
for index, element := range list {
switch value := element.(type) {
case int:
fmt.Printf("list[%d] 是int類型,值是 %d\n", index, value)
case string:
fmt.Printf("list[%d] 是string類型,值是 %s\n", index, value)
default:
fmt.Printf("list[%d] 是其他類型\n", index)
}
}
}
~~~
- 一、數組
- 二、切片
- 三、copy
- 四、MAP
- 五、結構體
- 六、結構體參數
- 七、面向”對象“
- 1、匿名字段
- 2、方法
- 3、包和封裝
- 4、接口
- 5、異常處理
- 八、Json
- 九、文件操作
- 1、寫文件
- 2、讀取文件內容
- 3、拷貝文件
- 十、反射
- 1、查看類型,字段和方法
- 2、查看匿名字段
- 3、修改基本類型的值
- 4、修改結構體的值
- 5、調用方法
- 十一、并發編程
- 1、并行和并發
- 2、協程
- 3、runtime包
- 5、channel的使用
- 6、close
- 7、定時器
- 8、select
- 9、協程同步鎖
- 十二、socket編程
- 十三、Http編程
- 十四、并發爬蟲和數據處理
- 1、簡易爬蟲實例
- 2、并發爬取圖片
- 3、讀文件中的數據
- 4、數據清洗
- 其他
- 1、推薦文章