成人免费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

專利

2020-06-30 10:30:24

編程語言開發大數據

2023-02-03 15:48:20

數據中心云計算安全

2022-09-22 15:01:13

智能建筑物聯網

2009-02-27 13:45:00

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

2023-11-05 12:20:10

匿名函數Golang

2021-05-28 05:34:06

Golang語言編程

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

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

2011-05-26 16:52:33

2010-06-13 16:09:28

MySQL maste

2019-07-29 16:05:26

物聯網數據科技

2021-12-23 17:15:54

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

51CTO技術棧公眾號

主站蜘蛛池模板: av大片在线观看 | 青春草在线 | 日韩欧美一区二区三区四区 | 国产一区二区精品在线 | 国产在线视频在线观看 | 隔壁老王国产在线精品 | 国产精品一区二区三区在线 | 国产一区二区在线播放 | 精品三区| 99久久婷婷国产综合精品电影 | 国产午夜精品久久久久 | 有码一区 | 日韩在线不卡视频 | 日韩在线免费 | 久久久久久网 | 日韩一区二区三区视频 | 国产精品久久国产精品 | 久久青青 | 国产精品久久久久久久久久久久 | 国产sm主人调教女m视频 | 国产精品一区二区欧美 | 日本在线一二 | 91久久精品国产免费一区 | 成人在线看片 | 久久9精品 | 久久天堂网 | 美女视频久久 | 久久夜夜 | 粉嫩粉嫩芽的虎白女18在线视频 | 操亚洲 | 久久久91精品国产一区二区三区 | 日本网站免费在线观看 | 亚洲一区 中文字幕 | 免费一区二区三区 | 欧美日韩成人一区二区 | 一级特黄视频 | 国产成人免费一区二区60岁 | 污污的网站在线观看 | 中文字幕第一页在线 | 99久久影院 | 国产在线精品一区二区三区 |