深入理解go中interface机制

2025-08-07 21:50

本文主要是介绍深入理解go中interface机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学...

前言

go的interface是一组method的集合,不关心属性(数据),只关心行为(方法)。具体使用中你可以自定义自己的 struct,并提供特定的 interface 里面的 method 就可以把它当成 interface 来使用

interface使用

package main

import "fmt"

type Speaker interface {
    Say() string
}

type User struct {
    id   int64 `UserService`
    name string
}

func (user *User) Say() string {
    return "aaaa"
}

func (user *User) Say1() string {
    return "aaaa1"
}

func main() {
    var user = &User{
       1, "aa",
    }
    var s Speaker
    s = user
    fmt.Println(s.Say())
}

func speak(s Speaker) {
    fmt.Println(s.Say())
}

也可以定义多个interface

package main

import "fmt"

type Speaker interface {
    Say() string
}

type Speaker1 interface {
    Say1() string
}

type User struct {
    id   int64 `UserService`
    name string
}

func (user *User) Say() string {
    return "aaaa"
}

func (user *User) Say1() string {
    return "aaaa1"
}

func main() {
    var user = &User{
       1, "aa",
    }
    var (
       s  Speaker
       s1 Speaker1
    )
    s = user
    s1 = user
    fmt.Println(s.Say())
    fmt.Println(s1.Say1())
}

func speak(s Speaker) {
    fmt.Println(s.Say())
}

深入理解go中interface机制

也可以使用接口的组合

package mainhttp://www.chinasem.cn

import "fmt"

type Speaker interface {
    Speak() string
}

type Mover inte编程rface {
    Move() string
}

type Hello interface {
    Speaker
    Mover
}

type User struct {
    Name string
}

func (a User) Speak() string {
    return "aaa"
}

func (a User) Move() string {
    return "bbb"
}

func main() {
   
    user := User{Name: "aa"}

   
    showRobot(&user)
}

func showRobot(r Hello) {
    fmt.PrintChina编程ln("Speak:", r.Speak())
    fmt.Println("Move:", r.Move())
}

深入理解go中interface机制

单值类型断言

package main

import "fmt"

func main() {
    var i interface{} = "Hello, World!"

    // 使用单值类型断言
    s := i.(string)
    fmt.Println(s) // 输出: Hello, World!

    // 如果类型不匹配,会抛出 panic
    n := i.(int)
    fmt.Println(n)
}

结果为

深入理解go中interface机制

类型判断

package main

import "fmt"

func describe(i interface{}) {
    switch v := i.(type) {
    case int:
       fmt.Println("整型: ", v)
    case string:
       fmt.Println("字符javascript串:", v)
    case bool:
       fmt.Println("布尔值:", v)
    default:
       fmt.Println("未知类型: ", v)
    }
}

func main() {
    describe(66)
    describe("aa")
编程China编程}

输出结果为

深入理解go中interface机制

总结

interface是 Go 语言中实现多态性和代码复用的重要机制,能够让你编写更加通用和灵活的代码,可以利用它更好编码

到此这篇关于深入理解go中interface机制的文章就介绍到这了,更多相关go interface机制内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于深入理解go中interface机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155630

相关文章

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con