婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Golang語言中的interface

詳解Golang語言中的interface

熱門標簽:不封卡外呼系統 寧波語音外呼系統公司 仙桃400電話辦理 湛江crm外呼系統排名 地圖標注免費定制店 宿遷便宜外呼系統代理商 上海極信防封電銷卡價格 重慶慶云企業400電話到哪申請 鄭州智能語音電銷機器人價格

interface是一組method簽名的組合,interface可以被任意對象實現,一個對象也可以實現多個interface。任意類型都實現了空interface(也就是包含0個method的interface),空interface可以存儲任意類型的值。interface定義了一組方法,如果某個對象實現了某個接口的所有方法,則此對象就實現了此接口。

go version go1.12

package main

import (
  "fmt"
)

// 定義struct
type Human struct {
  name string
  age  int
  phone string
}
type Student struct {
  Human // 匿名字段
  school string
  loan  float32
}
type Employee struct {
  Human  // 匿名字段
  company string
  money  float32
}

// Human對象實現SayHi()方法
func (h Human) SayHi() {
  fmt.Printf("Hi, I am %s, you can call me on %s\n", h.name, h.phone)
}

// Human對象實現Sing()方法
func (h Human) Sing(lyrics string) {
  fmt.Println("La la la...", lyrics)
}

// Human對象實現Guzzle()方法
func (h Human) Guzzle(beerStein string) {
  fmt.Println("Guzzle Guzzle Guzzle...", beerStein)
}

// Employee對象重寫SayHi()方法
func (e Employee) SayHi() {
  fmt.Printf("Hi I am %s, I work at %s. Call me on %s\n", e.name, e.company, e.phone)
}

// Student對象實現BorrowMoney()方法
func (s Student) BorrowMoney(amount float32) {
  s.loan += amount
}

// Employee對象實現SpendSalary()方法
func (e Employee) SpendSalary(amount float32) {
  e.money -= amount
}

// 定義interface,interface是一組method簽名的組合
// interface可以被任意對象實現,一個對象也可以實現多個interface
// 任意類型都實現了空interface(也就是包含0個method的interface)
// 空interface可以存儲任意類型的值
// interface Men的3個method被Human,Student,Employee實現,也就是這3個對象都實現了interface Men。即:
// interface定義了一組方法,如果某個對象實現了某個接口的所有方法,則此對象就實現了此接口。
type Men interface {
  SayHi()
  Sing(lyrice string)
  Guzzle(beerStein string)
}

// interface YoungChap的BorrowMoney() method只被Student對象實現,也就是只有Student實現了YoungChap
type YoungChap interface {
  SayHi()
  Sing(song string)
  BorrowMoney(amount float32)
}

// interface ElderlyGent的SpendSalary() method只被Employee對象實現,也就是只有Employee實現了ElderlyGent
type ElderlyGent interface {
  SayHi()
  Sing(song string)
  SpendSalary(amount float32)
}

func main() {
  // 定義Student類型的變量
  lucy := Student{Human{"lucy", 19, "10086"}, "tsinghua", 100.00}
  lily := Student{Human{"lily", 19, "10086"}, "tsinghua", 100.00}
  liming := Student{Human{"liming", 19, "10086"}, "tsinghua", 100.00}
  // 定義Employee類型的變量
  tom := Employee{Human{"tom", 29, "10000"}, "Google", 200.00}
  // 定義Men類型的變量i
  var i Men
  // i存儲Student
  i = lucy
  fmt.Println("This is lucy, a student:")
  i.SayHi()
  i.Sing("Happy Birthday")
  i.Guzzle("Ha ha ha...")

  // i存儲Employee
  i = tom
  fmt.Println("This is tom, an Employee:")
  i.SayHi()

  // 定義slice Men,包含Men類型元素的切片,這個slice可以被賦予實現了Men接口的任意結構的對象
  fmt.Println("Let's use a slice of Men and see what happens:")
  x := make([]Men, 3)
  // 三個不同類型(不同Method)的元素,實現了同一個interface(Men)
  x[0], x[1], x[2] = lucy, lily, liming
  for _, value := range x {
    value.SayHi()
  }
}

函數參數

interface接口還可以作為函數參數,因為interface的變量可以持有任意實現該interface類型的對象,我們可以通過定義interface參數,讓函數接受各種類型的參數。 判斷interface變量存儲的元素的類型,目前常用的有兩種方法:Comma-ok斷言和switch測試。

go version go1.12

/**
 * interface接口作為函數參數
 * 判斷interface變量存儲的元素的類型
 */
package main

import (
  "fmt"
  "strconv"
)

// 定義Human對象
type Human struct {
  name string
  age  int 
  phone string
}

// 定義空接口
type Element interface{}

// 定義切片
type List []Element

// 定義Person對象
type Person struct {
  name string
  age int 
}

// 通過定義interface參數,讓函數接受各種類型的參數
// 通過這個Method(方法),Human對象實現了fmt.Stringer接口
// Stringer接口是fmt.Println()的參數,最終使得Human對象可以作為fmt.Println的參數被調用
func (h Human) String() string {
  return "" + h.name + " - " + strconv.Itoa(h.age) + " years - phone: " + h.phone + ">" 
}

// 通過定義interface參數,讓函數接受各種類型的參數
// 通過這個Method(方法),Person對象實現了fmt.Stringer接口
// Stringer接口是fmt.Println()的參數,最終使得Person對象可以作為fmt.Println的參數被調用
func (p Person) String() string {
  return "(name: " + p.name + " - age: " + strconv.Itoa(p.age) + " years)"
}

func main() {
  // interface作為函數的參數傳遞
  Lucy := Human{"Lucy", 29, "10086"}
  fmt.Println("This human is:", Lucy)

  list := make(List, 3)
  list[0] = 100
  list[1] = "Hello Golang!"
  list[2] = Person{"Lily", 19}

  // Comma-ok斷言
  for index, element := range list {
    // 判斷變量的類型 格式:value, ok = element(T)
    // value是interface變量的值,ok是bool類型,element是interface的變量,T是斷言的interface變量的類型
    if value, ok := element.(int); ok {
      fmt.Printf("list[%d] is an int and it's value is %d\n", index, value)
    } else if value, ok := element.(string); ok {
      fmt.Printf("list[%d] is a string and it's value is %s\n", index, value)
    } else if value, ok := element.(Person); ok {
      fmt.Printf("list[%d] is a Person and it's value is %s\n", index, value)
    } else {
      fmt.Printf("list[%d] is a different type\n", index)
    }
  }

  // switch
  for index, element := range list {
    // 注意:element.(type)語法不能在switch外的任何邏輯中使用
    switch value := element.(type) {
    case int:
      fmt.Printf("list[%d] is an int, it's value is %d\n", index, value)
    case string:
      fmt.Printf("list[%d] is a string, it's value is %s\n", index, value)
    case Person:
      fmt.Printf("list[%d] is a Person, it's value is %s\n", index, value)
    default:
      fmt.Printf("list[%d] is a differernt type", index)
    }
  }
}

以上就是詳解Golang語言中的interface的詳細內容,更多關于Golang語言中的interface的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Golang中interface{}轉為數組的操作
  • 淺談Golang 嵌套 interface 的賦值問題
  • Golang 實現interface類型轉string類型
  • 解決golang 反射interface{}做零值判斷的一個重大坑
  • 基于go interface{}==nil 的幾種坑及原理分析
  • golang interface判斷為空nil的實現代碼
  • 使用go的interface案例實現多態范式操作
  • go 類型轉換方式(interface 類型的轉換)

標簽:西雙版納 青海 安康 物業服務 海南 電子產品 儋州 遼寧

巨人網絡通訊聲明:本文標題《詳解Golang語言中的interface》,本文關鍵詞  詳解,Golang,語言,中的,interface,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Golang語言中的interface》相關的同類信息!
  • 本頁收集關于詳解Golang語言中的interface的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲午夜精品一区二区三区他趣| 成人av网站在线| 国产精品每日更新在线播放网址| 精品亚洲成a人| 欧美在线观看18| 日本一区二区视频在线观看| 欧美成人video| 欧美挠脚心视频网站| 国产精品三级久久久久三级| 爽爽淫人综合网网站| 丁香激情综合国产| 久久色在线观看| 国内精品伊人久久久久av影院| 99久久久久久99| 国产女主播一区| 国产精品白丝jk黑袜喷水| 国产欧美综合色| www.亚洲在线| 一区二区免费在线播放| 一本久久综合亚洲鲁鲁五月天 | 成人在线视频一区二区| 欧美成人在线直播| 美女视频网站久久| 国产欧美一区二区在线观看| 国产成人亚洲综合a∨婷婷| 国产精品网站在线播放| kk眼镜猥琐国模调教系列一区二区| 国产欧美日韩亚州综合| 国产精品自在在线| 亚洲人成精品久久久久| 欧美日韩激情一区| 九九热在线视频观看这里只有精品| 日韩一区二区三区在线观看| 麻豆精品视频在线观看视频| 精品久久久久久无| 91美女片黄在线观看91美女| 一区二区三区资源| 精品欧美久久久| 风间由美一区二区av101| 亚洲精品视频在线观看免费| 欧美一区二区三区在线| 91久久精品国产91性色tv| 蜜桃精品视频在线观看| 综合电影一区二区三区 | 欧美午夜视频网站| 国内精品国产成人| 一区二区三区在线免费视频| 精品国产亚洲在线| 色94色欧美sute亚洲线路二| 麻豆一区二区在线| 一区二区三区四区高清精品免费观看| 欧美xxxxx牲另类人与| 一本色道**综合亚洲精品蜜桃冫| 久久爱另类一区二区小说| 亚洲乱码国产乱码精品精的特点| 欧美放荡的少妇| 91色porny| 国产麻豆精品95视频| 亚洲精品网站在线观看| 中文字幕第一页久久| 欧美成人午夜电影| 欧美影片第一页| 91丨porny丨中文| 粉嫩av一区二区三区| 男女男精品网站| 亚洲精品中文字幕在线观看| 久久久综合精品| 精品91自产拍在线观看一区| 欧美喷潮久久久xxxxx| 日本福利一区二区| 99久久精品国产一区| 不卡大黄网站免费看| 国产成人免费视频一区| 韩国欧美国产一区| 日本三级韩国三级欧美三级| 日韩va亚洲va欧美va久久| 日本不卡一区二区| 日本网站在线观看一区二区三区| 性做久久久久久久免费看| 亚洲bdsm女犯bdsm网站| 麻豆国产91在线播放| 国产在线精品不卡| 91亚洲精品乱码久久久久久蜜桃 | 日本一不卡视频| 国产一区二区91| 成人激情开心网| 99re这里只有精品6| 91国产免费观看| 欧美一区二区福利视频| 久久午夜羞羞影院免费观看| 久久婷婷国产综合国色天香| 中文字幕av一区 二区| 自拍偷拍亚洲欧美日韩| 亚洲成人精品一区二区| 另类专区欧美蜜桃臀第一页| 美女诱惑一区二区| 国产一区二区三区不卡在线观看 | 免费在线视频一区| 日韩欧美国产三级电影视频| 视频一区在线播放| 韩国欧美国产1区| 亚洲欧美中日韩| 日韩视频中午一区| 91国偷自产一区二区开放时间 | 亚洲最色的网站| 美腿丝袜一区二区三区| 亚洲欧美色图小说| 欧美大白屁股肥臀xxxxxx| 99re这里都是精品| 九色综合国产一区二区三区| 国产成人精品免费网站| 激情综合色丁香一区二区| 久久久久久久久久久久久久久99 | 亚洲美女一区二区三区| 久久综合视频网| 在线观看不卡一区| 亚洲精品一区二区三区99| 最新不卡av在线| 久久先锋影音av鲁色资源| 欧美视频在线一区二区三区 | 国产一区二区精品久久| 五月天网站亚洲| 一区二区中文视频| 91影视在线播放| 久久综合狠狠综合久久激情 | 国产三级精品在线| 亚洲精品在线观看视频| 在线不卡中文字幕| 欧美日本精品一区二区三区| k8久久久一区二区三区| 成人国产亚洲欧美成人综合网| 毛片av中文字幕一区二区| 午夜精品久久久久久久久久久| 99久久精品免费看国产免费软件| 国产午夜久久久久| 国产亚洲精品久| 欧美国产激情二区三区| 国产欧美一区二区精品忘忧草 | 国产亚洲综合av| 久久久久久久综合日本| 日韩精品资源二区在线| 日韩欧美在线观看一区二区三区| 日韩欧美一二三| 久久婷婷成人综合色| 久久噜噜亚洲综合| 一区二区三区免费在线观看| 一级中文字幕一区二区| 日韩精品亚洲专区| 麻豆91精品91久久久的内涵| 老司机精品视频导航| 国产高清精品网站| 日本久久精品电影| 免费的成人av| 久久久久久久久久久久久久久99| 国产精品色婷婷久久58| 1024成人网| 青青草原综合久久大伊人精品优势| 韩国av一区二区三区| 色哟哟亚洲精品| 欧美不卡激情三级在线观看| 国产精品美女久久久久aⅴ国产馆| 色噜噜狠狠色综合中国| 午夜激情一区二区三区| 国产精品99久久久久久久女警| av中文字幕不卡| 欧美视频三区在线播放| 欧美大片免费久久精品三p| 国产精品麻豆一区二区 | 天天色综合天天| 狠狠色综合色综合网络| 成人蜜臀av电影| 亚洲国产成人va在线观看天堂| 亚洲人成伊人成综合网小说| 欧美一区二区三区啪啪| 欧美精品一区二区三区很污很色的| 欧美亚洲一区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲一二三四久久| 久久 天天综合| 欧美在线你懂得| 中文字幕av不卡| 国产一区二区不卡老阿姨| 欧美丝袜丝交足nylons| 中文字幕高清一区| 综合久久综合久久| www.欧美.com| 日本一二三不卡| 国产在线不卡视频| 美女性感视频久久| 不卡视频在线观看| 精品毛片乱码1区2区3区| 国产麻豆成人精品| 九色|91porny| 欧美剧在线免费观看网站| 国产精品色一区二区三区| 久久99深爱久久99精品| 欧美午夜不卡视频| 亚洲欧美一区二区三区国产精品| 夫妻av一区二区| 北条麻妃一区二区三区|