经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
[系列] Go - 结构(struct) 实现 接口(interface)
来源:cnblogs  作者:新亮笔记  时间:2020/12/28 9:54:50  对本文有异议

在 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 string) string
  7. Speak(msg string) string
  8. Read(msg string) string
  9. Write(msg string) string
  10. }
  11. type study struct {
  12. Name string
  13. }
  14. func (s *study) Listen(msg string) string {
  15. return s.Name + " 听 " + msg
  16. }
  17. func (s *study) Speak(msg string) string {
  18. return s.Name + " 说 " + msg
  19. }
  20. func (s *study) Read(msg string) string {
  21. return s.Name + " 读 " + msg
  22. }
  23. func (s *study) Write(msg string) string {
  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. }

代码解释

一、

  1. 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 个方法,别人只管调用就好了,内部实现别人无需关心。

原文链接:http://www.cnblogs.com/xinliangcoder/p/14197759.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号