golang之interface(接口)与 reflect 机制
2016-09-11 20:56
357 查看
一、概述
什么是interface,简单的说,interface是一组method的组合,通过interface来定义对象的一组行为;
interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口;
二、反射机制
什么是interface,简单的说,interface是一组method的组合,通过interface来定义对象的一组行为;
interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口;
package main import "fmt" 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("lalala...", lyrics) } //Human对象实现了Guzzle方法 func (h *Human) Guzzle(beerStein string) { fmt.Println("Guzzle Guzzle...", beerStein) } //Student 实现了BorrowMoney方法 func (s *Student) BorrowMoney(amount float32) { s.loan += amount } //Empolyee 重载了Human的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) } //Employee实现了SpendSalary的方法 func (e *Employee) SpendSalary(amount float32) { e.money -= amount } //define interface /* type Men interface { Sayhi() Sing(lyrics string) Guzzle(beerStein string) } type YoungChap interface { Sayhi() Sing(song string) BorrowMoney(amount float32) } type ElderlyGent interface { Sayhi() Sing(song string) SpendSalary(amount float32) } */ //interface Men被Human,Student, Employee都实现 // Student, Employee包含了Human匿名字段,所有也包含了其接口实现 type Men interface { Sayhi() Sing(lyrics string) } func main() { mike := Student{Human{"Mike", 24, "22-22-xx"}, "MIT", 0.00} paul := Student{Human{"paul", 26, "23-32-xx"}, "Harvard", 5.00} sam := Employee{Human{"Sam", 46, "33-33-33"}, "Gling inc", 1000} Tom := Employee{Human{"Tom", 33, "33-334-11"}, "Things ltd", 400} var i Men //interface type i = &mike fmt.Println("this is Mike, a Student\n") i.Sayhi() i.Sing("my name is Mike") i = &Tom fmt.Println("this is Tom, an employee\n") i.Sayhi() i.Sing("my name is Tom") x := make([]Men, 3) x[0], x[1], x[2] = &paul, &sam, &mike for _, value := range x { value.Sayhi() } }
二、反射机制
package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 p := reflect.ValueOf(&x) v := p.Elem() fmt.Println(v) v.SetFloat(8.3) fmt.Println(v) }
相关文章推荐
- 浅谈类两种继承机制--接口(Interface)和类(Class)的区别
- golang语法总结(二十二):接口interface
- 【Java】接口interface的介绍与编译器的方法绑定机制
- Golang面向API编程-interface(接口)
- 浅谈类两种继承机制--接口(Interface)和类(Class)的区别
- golang系列----接口使用技巧(interface)
- golang 接口interface{}、断言、switch type
- Java中的接口interface实现、与继承extends机制。
- golang reflect 反射机制
- 浅谈类两种继承机制--接口(Interface)和类(Class)的区别
- 浅谈类两种继承机制--接口(Interface)和类(Class)的区别
- 浅谈类两种继承机制--接口(Interface)和类(Class)的区别
- golang读取接口数据interface{}
- 跟着猫哥学Golang 13 - 接口 interface
- golang中interface接口的深度解析
- Golang-interface(二 接口与nil)
- JAVA中基于接口(Interface)的回调机制
- Golang-interface(三 接口类型)
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
- Golang接口(interface)三个特性(译文)