小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

Go语言方法实现接口

Go,golang,开发语言 额外说明

收录于:17天前

接口

在Go语言中,接口不需要显式声明。只需要通过方法实现接口的功能并指向自定义类型(结构体或其他自定义类型变量)。 Go 不关心具体实现的接口,只关心实现该接口的函数。

当实现接口的功能时,方法指向的数据结构自动实现同名函数的接口,因此可以实现多重继承,降低耦合。

接口是带有方法的接口。所有接口都没有方法体。该接口不需要显式实现。只要实现了接口的方法,就是接口的实现类型。

package main

import (
	"fmt"
)

func main() {
    
	phone1 := Phone{
    }
	phone1.start()
	phone1.stop()

	camera1 := Camera{
    }
	camera1.start()
	camera1.stop()

}

//定义接口
type USB interface {
    
	start()
	stop()
}

// 手机结构体
type Phone struct {
    
}

// 方法将结构体与函数联系起来
func (p Phone) start() {
    
	fmt.Println("phone usb is working")
}

func (p Phone) stop() {
    
	fmt.Println("phone usb is stopping")
}

// 摄像机结构体
type Camera struct {
    
}

func (c Camera) stop() {
    
	fmt.Println("camera usb is stopping")
}

func (c Camera) start() {
    
	fmt.Println("camera usb is working")
}

接口默认为指针类型,如果不初始化则默认为nil。空接口没有任何方法,因此所有类型都实现空接口。

一个类型需要实现了接口,才能将实例赋给接口类型变量,主要是自定义(通过type关键字)的类型,都可以实现接口,不仅仅是结构体。一个自定义的类型可以实现多个接口,接口也可以继承别的接口,通过及接口内嵌完成,必须将接口的所有方法都实现。

由于Go继承的独特性,没有class,implements等关键字的显示声明,仅仅和函数强关联,依次在Go实现多继承时,变量的类型仍然唯一。如下:

class A{
    

}

class B{
    
}

class C extends A,B{
    

}

如果在Java中多继承,就会出现类的成员变量和方法均不一样的状况,
如果实现多继承,那么子类就是两个父类的并集,子类有了其本该具有的特性和行为。这显然不太合理。
type A interface{
    
	method1()
	method2()
	...
}

type B interface{
    
	function1()
	function2()
	...
}

type C struct {
    
}

func (c C) method1(){
    
}

func (c C) function1(){
    
}

在Go中多继承,每个结构体有自己独特的属性,另外话可以选择性的继承接口的方法,
使结构体具有自己独特的行为

在Go语言中,只有实现了接口的所有方法,自定义类型才可以说实现了接口。在接口实现过程中,自定义类型和接口的方法可能会交叉,也可能直接实现接口的所有方法。

package main

import "fmt"

//父母接口
type Parent interface {
    
	ShowParent()
}

//亲戚接口
type Relative interface {
    
	ShowRalative()
}

//儿子结构体
type Son struct {
    
	name string
}

func (son Son) ShowSon() {
    
	fmt.Println("my name is mike")
}

func (son Son) ShowParent() {
    
	fmt.Println("my parent ...")
}

func (son Son) ShowRalative() {
    
	fmt.Println("my relative...")
}

func main() {
    
	var son Son
	son.name = "xiaoxu"
	son.ShowParent()
	son.ShowRalative()
	son.ShowSon() 

}

自定义类型可以实现多个接口并与接口方法相交。

type myType int

func (mype myType) ShowRalative() {
    
	fmt.Println("float is my relative")
}

func (mype myType) ShowParent() {
    
	fmt.Println("integer is my ShowParent")
}

接口继承

Go接口之间也可以发生继承,继承后的接口拥有父类的所有方法。

type A interface {
    
	Aint()
}

type B interface {
    
	Bint()
}

type C interface {
    
	A
	B
}

以前结构体和接口是不能继承的。一个代表元素的集合,另一个代表方法的集合。

type A interface {
    
	Aint()
}

type ATest struct {
    
	A
}

接口是一种类型,所以在接口体中也可以这样写。但由于接口方法没有方法体,所以必须继承并重写。因此无法实例化接口,所以上面的写法不会报语法错误,但语义错误。的。编译失败。

. . .

相关推荐

额外说明

现代、开源Linux服务器运维管理面板1Panel

1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括 官方文档:1Panel 文档 目录 1、系统简介  2、快速开始 3、安装教程  (1)执行脚本命令  (2)选择默认安装  (3)填写基本信息   (4

额外说明

实用Java判断Emoji表情

最后需求开发测试人员输入了个表情符号,导致数据库报错了,所以在后端加入了表情符号的校验,这里记录一下,后续遇到可以直接用。 引入依赖 <dependency> <groupId>com.vdurmont</groupId> <artifact

额外说明

【JavaSE】一起学多态

前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行   如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!   如果觉得博主文章还不错的话,希望三连支持! 目录 1.多态  1.1多态的概念  1.2多态实现条件

额外说明

【小Y学算法】⚡️每日LeetCode打卡⚡️——8.回文数

-前言 -原题样例 -C#方法:反转一半数字 -Java方法:反转一半数字 -总结 -前言 ---------------------------------------- - 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程- - 提示:本专栏

额外说明

Unity打包 之 ✨ 遇到的各类问题总计整理

Unity打包—遇到的各类问题总计整理(更新中) 此篇文章用来整理在使用Unity过程中,打包遇到的各种问题,以后也会都整理到这里 打包PC等 打包Android Unity同一工程打包出多个安卓apk,不相互覆盖按照安装说明 Unity2019打包安卓

额外说明

Python对Excel的操作(openpyxl)

需要openpyxl这个库,而且在读取的时候的格式为xlsx,而不是xls #pip3 install openpyxl import openpyxl import os #print(os.getcwd()) #D:\python os.chdi

额外说明

发布一个node密码加密的包

一、node-auth0主要提供的功能 1、密码加密 2、校验密码是否正确 二、包的使用 1、安装 npm install node-auth0 三、使用步骤 1、导包 import NodeAuth from 'node-auth0'; 2、实例化

额外说明

Django讲课笔记05:需求分析与系统设计

文章目录 零、本讲学习目标 一、课程导入 二、新课讲授 (一)基本概念 1、软件工程概述 2、软件工程阶段 3、软件需求 (1)业务需求 (2)用户需求 (3)功能需求 (4)系统需求 (5)非功能需求 4、软件设计 (二)商城需求说明 (三)设计说明

额外说明

Redis配置文件redis.conf详解

文章目录 常用配置 进阶配置 主从复制 安全 限制 CLIENTS RDB模式相关配置 AOF模式 appendonly配置 slowlog INCLUDES vm相关 其他配置 常用配置 Redis支持很多的参数配置,但都有默认值。 daemonize

额外说明

nginx.conf指令注释

nginx.conf指令注释 ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数。 worker_processes

ads via 小工具