速学Go语言接口interface

举报
海风极客 发表于 2022/10/17 22:42:59 2022/10/17
【摘要】 Go语言接口官网介绍:https://go.dev/ref/spec#Interface_typesAn interface type specifies a method set called its interface. A variable of interface type can store a value of any type with a method set that i...

Go语言接口

官网介绍:https://go.dev/ref/spec#Interface_types

An interface type specifies a method set called its interface. A variable of interface type can store a value of any type with a method set that is any superset of the interface. Such a type is said to implement the interface. The value of an uninitialized variable of interface type is nil.

接口类型指定一个名为其interface的方法集。接口类型的变量可以存储任何类型的值,其方法集是接口的任何超集。这样的类型被称为实现接口。未初始化的接口类型变量的值为空。

简单使用

package main

import "fmt"

type Leaner interface {
   toLearning()
}

type Stu struct {
   Name string
   Role string
}

type Tea struct {
   Name string
   Role string
}

func (s Stu) toLearning() {
   fmt.Println("I am " + s.Name + " a " + s.Role + "and I love Study.")
}

func (t Tea) toLearning() {
   fmt.Println("I am " + t.Name + " a " + t.Role + "and I love Study.")
}

func main() {
   s := Stu{Name: "zs", Role: "teacher"}
   s.toLearning()
   t := Tea{Name: "ls", Role: "Student"}
   t.toLearning()
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pz2nypWq-1639136862672)(Go语言接口.assets/image-20211201224353662.png)]

接口使用的注意事项:

接口可以嵌套,但是不能嵌套自己,也不能循环嵌套

例如:

// 正确:可以进行嵌套
type inter1 interface{
  sayHello()
}

type inter2 interface{
  inter1
  sayHi()
}

// 错误:Bad 不能嵌入自己
type Bad interface { 
	 Bad 
} 

// 错误:Bad1 不能使用 Bad2 嵌入自己
type Bad1 interface { 
	 Bad2 
} 
type Bad2 interface { 
	 Bad1 
}

interface在Map类型中的使用

interface在Go语言中可以被认为是最高级别的泛型,可以类比与Java的Object,在Map数据类型中的使用比较广泛。

示例:

func main() {
   myMap := map[string]interface{}{
      "id":   1,
      "name": "zs",
      "age":  100,
   }

   for k, v := range myMap {
      fmt.Print(k+"---")
      fmt.Print(v)
      fmt.Println()
   }
}

~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。