速学Go语言接口interface

简介: 速学Go语言接口interface

Go语言接口

官网介绍:go.dev/ref/spec#In…

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()
}
复制代码

网络异常,图片无法展示
|


接口使用的注意事项:

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

例如:

// 正确:可以进行嵌套
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()
   }
}


相关文章
|
13小时前
|
JSON 安全 Java
2024年的选择:为什么Go可能是理想的后端语言
【4月更文挑战第27天】Go语言在2024年成为后端开发的热门选择,其简洁设计、内置并发原语和强大工具链备受青睐。文章探讨了Go的设计哲学,如静态类型、垃圾回收和CSP并发模型,并介绍了使用Gin和Echo框架构建Web服务。Go的并发通过goroutines和channels实现,静态类型确保代码稳定性和安全性,快速编译速度利于迭代。Go广泛应用在云计算、微服务等领域,拥有丰富的生态系统和活跃社区,适合作为应对未来技术趋势的语言。
8 0
|
15小时前
|
安全 测试技术 Go
Golang深入浅出之-Go语言单元测试与基准测试:testing包详解
【4月更文挑战第27天】Go语言的`testing`包是单元测试和基准测试的核心,简化了测试流程并鼓励编写高质量测试代码。本文介绍了测试文件命名规范、常用断言方法,以及如何进行基准测试。同时,讨论了测试中常见的问题,如状态干扰、并发同步、依赖外部服务和测试覆盖率低,并提出了相应的避免策略,包括使用`t.Cleanup`、`t.Parallel()`、模拟对象和检查覆盖率。良好的测试实践能提升代码质量和项目稳定性。
6 1
|
15小时前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
8 1
|
15小时前
|
安全 Go
Golang深入浅出之-Go语言标准库中的文件读写:io/ioutil包
【4月更文挑战第27天】Go语言的`io/ioutil`包提供简单文件读写,适合小文件操作。本文聚焦`ReadFile`和`WriteFile`函数,讨论错误处理、文件权限、大文件处理和编码问题。避免错误的关键在于检查错误、设置合适权限、采用流式读写及处理编码。遵循这些最佳实践能提升代码稳定性。
5 0
|
17小时前
|
Go C++
go 语言回调函数和闭包
go 语言回调函数和闭包
|
18小时前
|
程序员 Go
|
21小时前
|
存储 负载均衡 监控
【Go 语言专栏】构建高可靠性的 Go 语言服务架构
【4月更文挑战第30天】本文探讨了如何利用Go语言构建高可靠性的服务架构。Go语言凭借其高效、简洁和并发性能,在构建服务架构中备受青睐。关键要素包括负载均衡、容错机制、监控预警、数据存储和服务治理。文章详细阐述了实现这些要素的具体步骤,通过实际案例分析和应对挑战的策略,强调了Go语言在构建稳定服务中的作用,旨在为开发者提供指导。
|
存储 IDE Java
go语言简单入门
go语言简单入门
139 0
|
缓存 搜索推荐 编译器
Go 语言入门很简单 -- 17. Go Package #私藏项目实操分享#
Go 语言入门很简单 -- 17. Go Package #私藏项目实操分享#
141 0
Go 语言入门很简单 -- 17. Go Package #私藏项目实操分享#
|
编译器 Shell 测试技术
Go 语言入门很简单--技巧和窍门(Tips and Tricks)
Go 语言入门很简单--技巧和窍门(Tips and Tricks)
154 0
Go 语言入门很简单--技巧和窍门(Tips and Tricks)