golang学习之结构体,方法,接口

1.结构体
在golang里,没有类的概念,但是如果非要实现像类那样的例子,那或许就是结构体了,结构体是一系列变量的集合,
定义

type s_name struct {
	v_name1 v_type1
	v_name2 v_type2
}

声明结构体类型的变量

var name = s_name{v_value1, v_value2}   
//或者
var name = s_name{v_name1: v_value1, v_name2: v_value2}

可是这跟类比,还少类方法啊,的确,不过golang也能给结构体加上方法。

2.方法
golang里,方法就是带有接收者的函数,何为接收者,即是任意类型(结构体,指针,接口等)的实例。函数跟类型绑定,即成了方法
定义

type Person struct {
	name string
	age int
}

//此处Person类型的person是sayHello方法的接收者,以后person可以调用此方法。
func (person Person) sayHello {
	fmt.Println("hello,goodmorning")
}  

person.sayHello()  
//结构体在定义的时候,并没有定义方法,但是通过上面的操作,就好像是该方法是结构体自己定义的一样。有点反客为主的意思。

在这里插入图片描述

把图内文字换一下就是
方法:你有方法嘛?结构体
结构体:没有
func (s Struct) Func {}
方法:那从现在起,你已经有了

当然方法不只是能绑定在结构体上,还能有很多类型。

3.接口
duck typing:假如,我认为黄色的,长的像鸭子的动物都算是鸭子,那么以后,只要是黄色的,长的像鸭子的东西,无论有没有生命,大小如何,他在我的范畴里都是鸭子。
duck typing 描述事物的外部行为而非内部结构,为多态的一种形式。是从使用者的角度来看的。如果我认为长得像鸭子的东西是鸭子,那么任何长的像鸭子的事物在我眼中就是鸭子

接口是一组方法签名的集合,体现的是泛型的思想。
接口是隐式实现的,只要实现了接口里的方法,就相当于实现了接口,即只要长的像鸭子,那么就是鸭子。

type if_name interface{
	method1()
	method2()
}

type S1 struct {}

func (s1 S1) method1() {}
func (s1 S1) method2() {}

s1实现了method1(),method2()方法,那么也就意味着S1实现了if_name这个接口,那么以后if_name就可以视为S1类型,反之亦然,如果多个类型都实现了两个方法,那么多个类型都可视为if_name类型,那么if_name就可以当做很多类型使用,这也许能称之为泛型吧。那么定义这样一个接口类型的数组,即可以装下各种实现了接口所有方法 的不同类型了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值