当前位置:   article > 正文

Go - struct{} 实现 interface{}

go struct 里面 参数interface{}

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

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

代码示例

  1. // main.go
  2. package main
  3. import (
  4.  "demo/study"
  5.  "fmt"
  6. )
  7. func main() {
  8.  name := "Tom"
  9.  s, err := study.New(name)
  10.  if err != nil {
  11.   fmt.Println(err)
  12.  }
  13.  fmt.Println(s.Listen("english"))
  14.  fmt.Println(s.Speak("english"))
  15.  fmt.Println(s.Read("english"))
  16.  fmt.Println(s.Write("english"))
  17. }
  18. // 输出
  19. Tom 听 english
  20. Tom 说 english
  21. Tom 读 english
  22. Tom 写 english
  1. // study.go
  2. package study
  3. import "github.com/pkg/errors"
  4. var _ Study = (*study)(nil)
  5. type Study interface {
  6.  Listen(msg stringstring
  7.  Speak(msg stringstring
  8.  Read(msg stringstring
  9.  Write(msg stringstring
  10. }
  11. type study struct {
  12.  Name string
  13. }
  14. func (s *study) Listen(msg stringstring {
  15.  return s.Name + " 听 " + msg
  16. }
  17. func (s *study) Speak(msg stringstring {
  18.  return s.Name + " 说 " + msg
  19. }
  20. func (s *study) Read(msg stringstring {
  21.  return s.Name + " 读 " + msg
  22. }
  23. func (s *study) Write(msg stringstring {
  24.  return s.Name + " 写 " + msg
  25. }
  26. func New(name string) (Study, error) {
  27.  if name == "" {
  28.   return nil, errors.New("name required")
  29.  }
  30.  return &study{
  31.   Name: name,
  32.  }, nil
  33. }

代码解释

一、
var _ Study = (*study)(nil)

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

二、
  1. type study struct {
  2.  Name string
  3. }

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

三、
  1. func New(name string) (Study, error) {
  2.  if name == "" {
  3.   return nil, errors.New("name required")
  4.  }
  5.  return &study{
  6.   Name: name,
  7.  }, nil
  8. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/907867
推荐阅读
相关标签
  

闽ICP备14008679号