千家信息网

Go如何通过结构struct实现接口interface

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关Go如何通过结构struct实现接口interface的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、通过结构(struct) 实现 接口(in
千家信息网最后更新 2026年11月02日Go如何通过结构struct实现接口interface

这篇文章给大家分享的是有关Go如何通过结构struct实现接口interface的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、通过结构(struct) 实现 接口(interface)

1、在了解iris框架的时候,经常看到有这样去写的使用一个空结构体作为接收器,来调用方法,有点好奇这样做有什么意义。

解释:在 Go 语言中,一个 struct 实现了某个接口里的所有方法,就叫做这个 struct 实现了该接口。

2、空结构体有以下几大特点

A、不占用内存地址。

B、地址不变

3、首先我们知道interface定义的是抽象方法,而下面的func是它的具体实现(这个和java差不多的意思),但是我们知道,在java中interface是没有办法实例化,因为他是抽象的。那么这个操作的作用是:首先NewEntraceRepository这个方法返回了一个空结构体的指针(该空结构体必须实现了当前interface),然后我们只要使用NewEntraceRepository创建的变量就可以直接调用当前interface的方法。

func NewEntraceRepository()EntraceRepository {    return &entraceRepository{};}

上面这段代码相当于下面

var variable_value  EntraceRepository=&entraceRepository{} 

疑问:为什么可以将这个空结构体赋值给interface,我们知道只有结构体实现了interface的所有方法才能这样进行赋值。

func (n bookRepository) GetBookList(m map[string]interface{})(total int,books []models.Book){}

其实一个 struct 实现了某个接口里的所有方法,就叫做这个 struct 实现了该接口。所以使用一个变量接收这个地址是可以直接调用的。

下面写一个 Demo 实现一下,先写一个 Study interface{},里面需要实现 4 个方法 Listen、Speak、Read、Write,然后再写一个 study struct{},去全部实现里面的方法,然后分享一下代码心得。

二、代码示例

//Go - 结构(struct) 实现 接口(interface) package main import (    "fmt"     "github.com/pkg/errors") var _ Study = (*study)(nil) type Study interface {    Listen(msg string) string    Speak(msg string) string    Read(msg string) string    Write(msg string) string} type study struct {    Name string} func (s *study) Listen(msg string) string {    return s.Name + " 听 " + msg} func (s *study) Speak(msg string) string {    return s.Name + " 说 " + msg} func (s *study) Read(msg string) string {    return s.Name + " 读 " + msg} func (s *study) Write(msg string) string {    return s.Name + " 写 " + msg} func New(name string) (Study, error) {    if name == "" {        return nil, errors.New("name required")    }     return &study{        Name: name,    }, nil} func main() {    name := "Xiao Ming "    s, err := New(name)    if err != nil {        fmt.Println(err)    }     fmt.Println(s.Listen("english"))    fmt.Println(s.Speak("english"))    fmt.Println(s.Read("english"))    fmt.Println(s.Write("english"))}

感谢各位的阅读!关于"Go如何通过结构struct实现接口interface"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

结构 方法 接口 代码 地址 内容 变量 更多 篇文章 不错 实用 好奇 差不多 作用 内存 办法 只有 实例 心得 意义 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳恒合互联网络科技有限公司 厦门中拓互联网络科技有限公司 互联网与科技金融数据 奇酷互联网络科技 上海喔噻互联网科技 融势互联网科技 万达互联网科技 左右互联网络科技 互联网科技股午盘股票涨跌 互联网公司会议桌创意科技软装饰 互联网企业和科技型企业 湖南一路畅行互联网科技 玉溪互联网科技怎么选 中国科技创新与世界互联网大会 河南住房之家互联网科技 区块链结合互联网科技 滨湖区互联网智能科技产品有哪些 中国新注册互联网科技 互联网科技创新方面的资料 宁波允成互联网科技有限公司 广州万易互联网科技有限公司 西安纸贵互联网科技有限公司 互联网科技巨头监管 互联网 新科技 左右互联网络科技 互联网科技公司做什么 昭通云南众福互联网科技有限公司 互联网科技公司实习生 互联网与医疗科技 互联网科技人工智能实验室
0