• go基础_接口断言


    // interface
    package main
    
    import (
    	"fmt"
    )
    
    //定义一个接口,接口名字Inter,接口的方法集有2个方法
    type Inter interface {
    	//声明方法
    	Ping()
    	Pang()
    }
    
    //方法的定义
    //Ping方法的接收者(适用对象)是St类型
    func (St) Ping() {
    	fmt.Println("ping")
    }
    
    //Pang方法的接收者(适用对象)是*St类型
    func (*St) Pang() {
    	fmt.Println("pang")
    }
    
    //定义一个接口,接口名字Anter,接口嵌套了Inter接口,另外还包括一个方法String
    type Anter interface {
    	Inter
    	String()
    }
    
    type Str string
    
    // 定义String方法,接收者是string
    func (Str) String() {
    	fmt.Println("String method")
    }
    
    //定义一个struct,名字是St,里面只有1个元素string
    type St struct {
    	Name string
    }
    
    func main() {
    	fmt.Println("Hello World!")
    
    	//st是St类型,并做了初始化
    	st := &St{"andes"}
    
    	// 变量i是接口类型,并做了初始化,初始化为st
    	var i interface{} = st
    
    	/*接口断言,Inter是接口类型名, i绑定的实例类型st满足接口类型Inter,
    	那么o的类型就是Inter,o就是i的副本*/
    	o := i.(Inter)
    	o.Ping()
    	o.Pang()
    
    	/*接口断言,*St是具体类型名,i绑定的实例类型st就是*St类型,
    	所以赋值结果s的类型就是*St,s结果是st的副本*/
    	s := i.(*St)
    	fmt.Println(s.Name)
    
    	//	/*接口断言, Anter是接口类型,i绑定的实例类型st不满足接口类型Anter,
    	//	此时会出异常*/
    	//	p := i.(Anter)
    	//	p.Ping()
    	//	p.Pang()
    
    }
    

      

    大道至简
  • 相关阅读:
    自动化基础知识
    第一章Google软件测试介绍
    《将博客搬至CSDN》
    二叉树的先序遍历和中序遍历分析(递归)
    java 部分快捷功能
    toString
    自增自减运算符剖析
    二进制数的直接表示
    编程中的&&和||
    npm 镜像地址设置
  • 原文地址:https://www.cnblogs.com/liurong07/p/10621351.html
Copyright © 2020-2023  润新知