成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Golang 語言編程使用接口有哪些好處?

開發 后端
本文我們主要介紹在 Golang 語言項目開發中,為什么使用接口,以及使用接口的好處,并通過示例代碼證明接口帶來的好處。

[[437106]]

01介紹

在 Golang 語言中,接口類型定義了一組方法簽名,接口類型的值可以保存實現了這些方法的任何值。

Golang 語言的接口是隱式實現的,它不像其他某些編程語言,使用 implements 關鍵字顯式實現接口,Golang 語言沒有 implements 關鍵字,一個類型只要實現接口定義的所有方法,就等于實現了該接口,所以也稱為 Duck typing。

if something looks like a duck, swims like a duck and quacks like a duck then it’s probably a duck.

關于 Golang 語言接口的使用,我們已經在前面的文章中介紹過,感興趣的讀者朋友可以翻閱一下。本文我們介紹一下使用接口有哪些好處?

02使用接口的好處

在 Golang 語言中,我們使用結構體和方法可以很完美的實現需求。為什么還要使用接口呢?實際上,接口是一個工具,是否選擇使用接口,取決于我們自己,它可以使我們的代碼更優雅,更簡潔,更具可讀性。下面我們通過一個簡單示例來說明接口的這些好處。

示例代碼:

  1. type Cat struct { 
  2.  
  3.  
  4. func (c Cat) Say() string { 
  5.  return "miaow" 
  6.  
  7. type Dog struct { 
  8.  
  9.  
  10. func (d Dog) Say() string { 
  11.  return "woof woof" 
  12.  
  13. func TestSay(t *testing.T) { 
  14.  c := Cat{} 
  15.  t.Log("Cat say:", c.Say()) 
  16.  
  17.  d := Dog{} 
  18.  t.Log("Dog say:", d.Say()) 

閱讀上面這段代碼,我們定義了兩個結構體 Cat 和 Dog,并分別為其實現了 Say 方法。讀者朋友們是否感覺到代碼有些重復,因為 Cat 和 Dog 都有相同的簽名的方法 Say,所以我們可以使用接口重構一下這段代碼。

示例代碼:

  1. type Sayer interface { 
  2.  Say() string 
  3.  
  4. type Cat struct { 
  5.  
  6.  
  7. func (c Cat) Say() string { 
  8.  return "miaow" 
  9.  
  10. type Dog struct { 
  11.  
  12.  
  13. func (d Dog) Say() string { 
  14.  return "woof woof" 
  15.  
  16. type Horse struct { 
  17.  
  18.  
  19. func (h Horse) Say() string { 
  20.  return "neigh" 
  21.  
  22. func TestSay(t *testing.T) { 
  23.  c := Cat{} 
  24.  // t.Log("Cat say:", c.Say()) 
  25.  // 
  26.  d := Dog{} 
  27.  // t.Log("Dog say:", d.Say()) 
  28.  
  29.  h := Horse{} 
  30.  
  31.  animals := []Sayer{c, d, h} 
  32.  for _, a := range animals { 
  33.   t.Log("say:", a.Say()) 
  34.  } 

閱讀上面這段代碼,我們定義了一個接口 Sayer,該接口只有一個方法簽名 Say。并且我們又新定義了一個結構體 Horse,和未使用接口的代碼不同的是,我們不需要使用 h.Say() 調用 Horse 結構體的 Say 方法。

03接口編程案例

在 Golang 語言項目開發中,為了更加方便操作 MySQL,我們通常會選擇開源 ORM,但是社區有很多 ORM,可能在項目后期會遇到更換 ORM 的需求,我們可以使用接口使 ORM 盡量少的侵入業務代碼,為以后替換 ORM 做準備。

  1. type DBOrm interface { 
  2.  Insert(param ...interface{}) 
  3.  
  4. type XormDB struct { 
  5.  db *xorm.Session 
  6. func (x *XormDB) Insert(param ...interface{}) { 
  7.  _, err := x.db.Insert(param) 
  8.  if err != nil { 
  9.   log.Println(err) 
  10.  } 
  11.  
  12. // type GormDB struct { 
  13. //  db *gorm.DB 
  14. // } 
  15. //  
  16. // func (g *GormDB) Insert(param ...interface{}) { 
  17. //  g.db.Create(param) 
  18. // } 
  19.  
  20. type User struct { 
  21.  orm DBOrm 
  22.  Id int64 
  23.  Name string 
  24.  
  25. func (u *User) DB() DBOrm{ 
  26.  u.orm = new(XormDB) // 數據庫實例注入接口 
  27.  // u.orm = new(GormDB) 
  28.  return u.orm 
  29.  
  30. func TestOrm(t *testing.T) { 
  31.  user1 := new(User
  32.  user1.Name = "lucy" 
  33.  user1.DB().Insert(user1) 

閱讀上面這段代碼,我們創建了一個接口 DBOrm,創建了兩個 ORM 結構體,并分別實現了接口 DBOrm 的簽名方法,在業務結構體 User 中,包含的不是某個 ORM 結構體,而是 DBOrm 接口。

04總結

本文我們主要介紹在 Golang 語言項目開發中,為什么使用接口,以及使用接口的好處,并通過示例代碼證明接口帶來的好處。

 

最后,通過使用接口調用 ORM 的案例,介紹在實際項目開發中,接口為項目開發帶來的好處。

 

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2013-09-23 14:54:54

編程語言開發

2021-07-21 08:00:00

Kubernetes分布式存儲集群

2017-08-24 09:06:37

無代理備份好處

2022-01-06 22:10:38

Java容器微服務

2011-12-23 15:20:46

專利

2023-11-05 12:20:10

匿名函數Golang

2020-06-30 10:30:24

編程語言開發大數據

2021-05-28 05:34:06

Golang語言編程

2022-09-22 15:01:13

智能建筑物聯網

2023-02-03 15:48:20

數據中心云計算安全

2009-02-27 13:45:00

服務器合租合租服務器的好處

2021-09-13 05:02:49

GogRPC語言

2021-04-27 16:44:54

物聯網工業物聯網數據

2021-01-05 10:17:38

人臉識別AI人工智能

2021-02-21 13:48:13

Java編程語言

2021-12-02 10:16:10

機器人編程語言計算機語言

2010-06-13 16:09:28

MySQL maste

2011-05-26 16:52:33

2019-07-29 16:05:26

物聯網數據科技

2021-12-23 17:15:54

區塊鏈域名加密貨幣
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美综合一区二区 | 黄色免费网| 亚洲欧美国产精品久久 | 国内精品久久久久 | 日本成人久久 | 免费成人在线网站 | 国产综合网址 | 亚洲成人二区 | 精品国产91久久久久久 | 亚洲精品中文字幕中文字幕 | 国产一区二区在线免费观看 | 亚洲一区自拍 | 欧美高清视频 | 青久草视频 | 国产69精品久久久久777 | 中文字幕日韩一区 | 毛片a| 国产视频一区二区在线观看 | 自拍 亚洲 欧美 老师 丝袜 | 九九热这里只有精品6 | 在线中文视频 | 中文字幕亚洲精品 | 一区二区久久 | 欧美精品乱码久久久久久按摩 | 一区二区三区视频免费看 | 成人在线免费观看 | 狠狠干狠狠操 | 欧美一级电影免费观看 | 99精品免费久久久久久久久日本 | 国产精品一区二区在线播放 | 亚洲精品久久久久中文字幕欢迎你 | 国外成人在线视频网站 | 国产精品久久久久无码av | 欧美日韩三区 | 久久91| 国产精品九九九 | 日韩在线91 | 免费黄视频网站 | 午夜电影合集 | 精品视频一区二区三区在线观看 | 亚洲国产精品一区二区久久 |