Go言語のインターフェースは、型、抽象型です。インターフェースはメソッドのコレクションです。インターフェースは、マシンにランドリー機能とダンプ機能がある限り、プロトコルとルールを定義するようなものです。ドライ関数は、洗濯機。属性は気にせず
、動作インターフェースの実装条件だけを気にします。
オブジェクトがインターフェースのすべてのメソッドを実装している限り、インターフェースが実装されます。つまり、インターフェースはリストです。必要に実装することの方法。の
インタフェース型変数
インタフェースタイプは、インタフェースを実装するすべてのインスタンスを格納することができ、
種類およびインタフェース。関係
A型は、同時に複数のインタフェースを実装することができる
。の値は、これらのインターフェイスは独立したインターフェイスです。インターフェイス
のストレージは2つの部分に分かれており、1つは特定のタイプ、1つは特定のタイプの値であり、これら2つの部分は動的タイプと動的値と呼ばれます。
package main
import "fmt"
//定义一个接口
type pp interface {
run()
}
type person struct {
name string
age int
}
func (p *person) run() {
fmt.Println("跑")
}
type print struct {
name string
}
func (p print) run() {
fmt.Println("跑不了")
}
func main() {
p := &person{
"dlq",
21,
}
//初始化接口
pp1 := pp(p)
pp1.run()
p1 := print{
"zkj",
}
//接口类型可以存储所有类型的实力
//当类型下的函数,为指针就守着,那么存到接口中的也应该为指针类型
pp2 := pp(p1)
pp2.run()
}
インターフェイスのネスト、型とインターフェイスの関係、空のインターフェイス、型アサーション
package main
import "fmt"
type pp1 interface {
run()
}
type pp2 interface {
move()
}
//接口的嵌套,那么这个切口就拥有所有嵌套的接口中的方法
type pp3 interface {
pp1
pp2
}
type person struct {
name string
age int
}
func (p *person) run() {
fmt.Println("run")
}
func (p *person) move() {
fmt.Println("move")
}
//一个类型可以同时实现多个接口,接口之间是独立的
func main() {
p := &person{
}
pp1 := pp1(p)
pp2 := pp2(p)
pp1.run()
pp2.move()
pp3 := pp3(p)
pp3.move()
//空接口
mapp := map[string]interface{
}{
"name": "dlq",
"age": 12,
"hobby": []string{
"吃", "喝", "玩", "乐"},
}
fmt.Println(mapp)
x := mapp["hobby"]
//类型断言,判断一个变量是不是你想要的值
v, ok := x.([]string)
if !ok {
fmt.Println("这个变量不是[]string类型")
}
fmt.Println(v)
}