一、概述

  什么是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", , "22-22-xx"}, "MIT", 0.00}
paul := Student{Human{"paul", , "23-32-xx"}, "Harvard", 5.00}
sam := Employee{Human{"Sam", , "33-33-33"}, "Gling inc", }
Tom := Employee{Human{"Tom", , "33-334-11"}, "Things ltd", } 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, )
x[], x[], x[] = &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)
}

golang之interface(接口)与 reflect 机制的更多相关文章

  1. Golang 之 interface接口全面理解

    什么是interface 在面向对象编程中,可以这么说:“接口定义了对象的行为”, 那么具体的实现行为就取决于对象了. 在Go中,接口是一组方法签名(声明的是一组方法的集合).当一个类型为接口中的所有 ...

  2. golang基础--Interface接口

    接口是一个或多个方法签名名的集合,定义方式如下 type Interface_Name interface { method_a() string method_b() int .... } 只要某个 ...

  3. golang面向对象和interface接口

    一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...

  4. JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac

    记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...

  5. go语言之行--接口(interface)、反射(reflect)详解

    一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...

  6. Golang 入门系列(四)如何理解interface接口

    前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友,可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category ...

  7. Golang基础(8):go interface接口

    一:接口概要 接口是一种重要的类型,他是一组确定的方法集合. 一个接口变量可以存储任何实现了接口方法的具体值.一个重要的例子就是io.Reader和io.Writer type Reader inte ...

  8. golang的interface剖析

      背景: golang的interface是一种satisfied式的.A类只要实现了IA interface定义的方法,A就satisfied了接口IA.更抽象一层,如果某些设计上需要一些更抽象的 ...

  9. Golang的Interface是个什么鬼

    问题概述 Golang的interface,和别的语言是不同的.它不需要显式的implements,只要某个struct实现了interface里的所有函数,编译器会自动认为它实现了这个interfa ...

  10. interface接口

    当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口 interface. 定义接口使用的关键字不是class,是interface.接口中常见的成员: 这些成员都有 ...

随机推荐

  1. 银行卡检测中心BCTC

    BCTC是Banking Card Test Center的缩写. 银行卡检测中心(下称中心)经中国人民银行总行批准成立于1998年4月,作为一个独立的第三方专业技术检测机构,其主要职责是按照国际.国 ...

  2. yii post delete request more safe

    常规的delete方法如下: /**  * Deletes a particular model. * If deletion is successful, the browser will be r ...

  3. openStack CI(Continuous interaction)/CD(Continuous delivery) Gerrit/Jenkins安装及集成,插件配置

    preFace: CI/CD practice part contains the following action items and fields of expertise: Gerrit ins ...

  4. 无线网破解软件|一键式破解无线网|BT17软件包下载[笔记本+软件就行]

    从新版BT17发布到现在已经有一段时间,谢谢大家的一直来的关注.现在给大家讲解一下无线网破解问题,告诉 大家如何一键式破解WPA,WPA2,AES.Tkip等加密方式以及新版BT17软件包的下载地址. ...

  5. 怎样解决Ubuntu发热严重地问题

    刚装ubuntu的时候那是相当地热,hot.直接地原因是没有对应地显卡驱动,然后在software update里面找到Nivida地最新驱动,兴高採烈地装上试一试.一点用处没有! 在网上搜了搜,有一 ...

  6. 重写系统中的UINavigationController 返回按钮的事件

    .扩展UIviewController UIViewController+BackButtonHandler.h #import <UIKit/UIKit.h> @protocol Bac ...

  7. android捕获程序异常退出

    今天看到迅雷动漫里面一个CrashHandler 的类,我猜是崩溃处理类.进去一看.果然.顺便学习一下. Android系统的"程序异常退出",给应用的用户体验造成不良影响.为了捕 ...

  8. java基础之高级应用

    在程序中涉及方法重写的地方使用@override Annotation(只作用于方法)注释可以很好的避免由于重写方法名字过长而造成的程序后期出现的难以调试的错误,特别是程序没有报任何的错误时,而程序的 ...

  9. 【整理】SQLServer查询各种数据库对象(表,索引,视图,图表,存储过程等)

    首先明确数据库对象的定义:数据库对象定义数据库内容的结构.它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本. 常见的数据库对象包括:表,索引,视图,图表,缺省值,规则,触发器,存储过程, ...

  10. EJB QI查询

    EO.PNAME like ?1 OR  EO.PNAME like ?2";      Query query = entityManager.createNativeQuery(quer ...