前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go - struct{} 实现 interface{}

Go - struct{} 实现 interface{}

作者头像
新亮
发布2020-09-28 11:26:21
8190
发布2020-09-28 11:26:21
举报
文章被收录于专栏:新亮笔记新亮笔记

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

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

代码示例

代码语言:javascript
复制
// main.go

package main

import (
 "demo/study"
 "fmt"
)

func main() {
 name := "Tom"
 s, err := study.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"))
}

// 输出
Tom 听 english
Tom 说 english
Tom 读 english
Tom 写 english
代码语言:javascript
复制
// study.go

package study

import "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
}


代码解释

一、
代码语言:javascript
复制
var _ Study = (*study)(nil)

要求 *study 去实现 Study,若 Study 接口被更改或未全部实现时,在编译时就会报错。

二、
代码语言:javascript
复制
type study struct {
 Name string
}

之所以定义为私有的结构体,是因为不想在其他地方被使用,比如后面将 Name 改成 UserName 只需要在本包内修改即可。

三、
代码语言:javascript
复制
func New(name string) (Study, error) {
 if name == "" {
  return nil, errors.New("name required")
 }

 return &study{
  Name: name,
 }, nil
}

在其他地方调用 New() 使用 Study 包时,仅对外暴露了 4 个方法,别人只管调用就好了,内部实现别人无需关心。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 新亮笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码示例
  • 代码解释
    • 一、
      • 二、
        • 三、
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档