zoukankan      html  css  js  c++  java
  • Golang 接口

    Golang 接口

    案例

    //定义一个接口
    type Usb interface {
    	start()
    	stop()
    	sum(int, int) int
    }
    type phone struct {
    }
    //实现接口方法
    func (p phone) start() {
    	fmt.Println("implement phone start")
    }
    
    func (p phone) stop() {
    	fmt.Println("implement phone stop")
    }
    
    func (p phone) sum(i int, i2 int) int {
    	return i + i2
    }
    
    //多态
    func method(usb Usb) {
    	usb.start()
    	usb.stop()
    }
    func main() {
    	p := phone{}
    	//多态
    	method(p)
    }
    

    定义

    interface可以定义一组方法,但是这些不需要实现。并且interface不能包含变量

    GO中接口不需要显示的实现,只要一个自定义数据类型,含有接口类型中所有的方法,那么这个自定义数据类型就实现这个接口。因此,Go中没有implement这样的关键字

    注意事项

    1. 接口本身不能创建实例, 但是可以指向一个实现了该接口的自定义类型的变量

    2. 接口中所有的方法都没有方法体

    3. 一个自定义类型需要将某个接口的所有方法都实现,我们就说这个自定义类型实现了该接口

    4. 一个自定义类型可以实现多个接口

    5. Go中接口不能有任何变量

    6. 和Java相同的,接口支持多继承,一个接口可以继承多个接口

    7. 只要是自定义数据类型,就可以实现接口, 不仅仅是接口体

      //定义一个接口
      type person interface {
      	say()
      }
      type Integer int
      //Integer实现person接口
      func (i Integer) say() {
      	fmt.Println("implement person say")
      }
      func main() {
      	var num Integer = 10
      	num.say()
      }
      
    8. interface类型默认是一个指针(引用类型),如果没有对interface初始化,那么输出nil

    9. 空接口interface{}没有任何方法,所有类型都实现了空接口,即我们可以把任何一个变量赋给空接口(包括基本变量

      type T interface {
      
      }
      func  name(i T)  {
      	fmt.Println("hello world")
      }
      func main() {
      	var num int = 1
      	name(num) 
      }
      

    例子

    type Hero struct {
    	Name string
    	Age  int
    }
    type heroSlice []Hero
    
    func (h heroSlice) Len() int {
    	return len(h)
    }
    
    //从大到小, 最大堆, 每次都将比h[j].Age大放在队列头,成为下一个h[j]
    func (h heroSlice) Less(i, j int) bool {
    	//i是比较的元素,j是被比较的元素
    	return h[i].Age > h[j].Age
    }
    
    func (h heroSlice) Swap(i, j int) {
    	tmp := h[i]
    	h[i] = h[j]
    	h[j] = tmp
    }
    
    func main() {
    	slices := heroSlice{
    		Hero{"张三", 2},
    		Hero{"李四", 23},
    		Hero{"王五",1},
    	}
    	fmt.Println(slices)
    	sort.Sort(slices)
    	fmt.Println(slices)
    }
    
  • 相关阅读:
    vue-element-admin 权限的添加
    vue 图标通过组件的方式引用步骤
    linux系统环境下配置vue项目运行环境
    5.5 卷积神经网络(LeNet)
    5.4 池化层
    5.3 多输入通道和多输出通道
    5.2 填充和步幅
    html && CSS
    P2827 [NOIP2016 提高组] 蚯蚓
    5.1 二维卷积层
  • 原文地址:https://www.cnblogs.com/kikochz/p/13492097.html
Copyright © 2011-2022 走看看