自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[437106]]

01介紹

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

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

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

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

02使用接口的好處

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

示例代碼:

  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()) 

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

示例代碼:

  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。并且我們又新定義了一個結(jié)構(gòu)體 Horse,和未使用接口的代碼不同的是,我們不需要使用 h.Say() 調(diào)用 Horse 結(jié)構(gòu)體的 Say 方法。

03接口編程案例

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

  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) // 數(shù)據(jù)庫實例注入接口 
  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) 

閱讀上面這段代碼,我們創(chuàng)建了一個接口 DBOrm,創(chuàng)建了兩個 ORM 結(jié)構(gòu)體,并分別實現(xiàn)了接口 DBOrm 的簽名方法,在業(yè)務(wù)結(jié)構(gòu)體 User 中,包含的不是某個 ORM 結(jié)構(gòu)體,而是 DBOrm 接口。

04總結(jié)

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

 

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

 

責(zé)任編輯:武曉燕 來源: Golang語言開發(fā)棧
相關(guān)推薦

2013-09-23 14:54:54

編程語言開發(fā)

2021-07-21 08:00:00

Kubernetes分布式存儲集群

2022-01-06 22:10:38

Java容器微服務(wù)

2011-12-23 15:20:46

專利

2017-08-24 09:06:37

無代理備份好處

2023-11-05 12:20:10

匿名函數(shù)Golang

2020-06-30 10:30:24

編程語言開發(fā)大數(shù)據(jù)

2009-02-27 13:45:00

服務(wù)器合租合租服務(wù)器的好處

2022-09-22 15:01:13

智能建筑物聯(lián)網(wǎng)

2023-02-03 15:48:20

數(shù)據(jù)中心云計算安全

2021-05-28 05:34:06

Golang語言編程

2021-09-13 05:02:49

GogRPC語言

2021-01-05 10:17:38

人臉識別AI人工智能

2021-04-27 16:44:54

物聯(lián)網(wǎng)工業(yè)物聯(lián)網(wǎng)數(shù)據(jù)

2021-02-21 13:48:13

Java編程語言

2021-12-02 10:16:10

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

2019-07-29 16:05:26

物聯(lián)網(wǎng)數(shù)據(jù)科技

2011-05-26 16:52:33

2010-06-13 16:09:28

MySQL maste

2019-02-21 09:00:00

PythonGolang編程語言
點贊
收藏

51CTO技術(shù)棧公眾號