博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fourth glance in Go
阅读量:6991 次
发布时间:2019-06-27

本文共 1759 字,大约阅读时间需要 5 分钟。

在Go里面的结构体和方法是很有意思的内容。它即和OO有点像,但又不完全一样。为什么这么说呢?当你把结构体映射为OO里面的类的时候,你给结构体添加方法,你就会发现其实方法与结构体并没有严格意义上的关系。在Go里面,方法是绑定到接受者上的。什么是接受者?一个对象,这个对象可以是任何类型,int,string, struct, interface ...。

func (t *Type) method_name(parameters) return type

但是同名的方法,在同一个类型上只能出现一次。而且该类型必须与方法在同一个包中。

另外一点是内嵌结构体的问题,方法是可以被继承的。也就是说一个结构体被内嵌到另一个结构体中,那么父结构体也就具有了内嵌结构体的方法

>>person.go-------------------------------------------package persontype Person struct {    firstName string    lastName  string}type BlackMan struct {    Person    color string}func (p *Person) FirstName() string {    return p.firstName}func (p *Person) SetFirstName(newName string) {    p.firstName = newName}>>main.go--------------------------------------------------package mainimport (    "./person"    "fmt")func main() {    p := new(person.BlackMan)    p.SetFirstName("Ace")    fmt.Println(p.FirstName())}

 一张图说明OO里面的继承体系与Go里面的继承体系区别

 

发现一个奇怪的问题:使用相同的方法去分配内存,得出的结果却截然不同

func main() {    var n [1024 * 1024 * 1024]int    n[0] = 1    m := new(runtime.MemStats)    runtime.ReadMemStats(m)    fmt.Printf("%d\n", m.Alloc/1024)}

这样程序的输出是占用8G空间,如果是1024 * 1024,输出则是 36K的空间占用。为什么?

 

Go中接口的指针方法和值方法的区别:

Pointer methods can be called with pointers.

• Value methods can be called with values.
• Value-receiver methods can be called with pointer values because they can be dereferenced
first.
• Pointer-receiver methods cannot be called with values, however, because the value stored
inside an interface has no address.

 

Go的面向对象总结

在Go里面是没有类的概念的,类型和方法是松耦合的,通过接口让他们链接在一起。

OO里面三个重要的概念:封装,继承和多态,在Go里面是这样对应的

封装(数据隐藏):其他的OO语言有4个访问级别,在Go里面只有2种

1. 包级:对象在整个包的范围内可见,以小写字母开头

2. 被导出:对象在包外可见,以大写字母开头

一个类型可以只有方法定义在它的包里。

继承:通过内嵌的一个或多个类型来达到多继承的目的

多态:接口,一个类型变量可以被分配给它的任意接口实现的实例。类型和接口是松耦合的, 多继承可以通过实现多个接口来完成。Go的接口不是Java或C#接口的变体, 它们更加的独立并且是大规模编程,鲁棒性和演变设计的关键

转载地址:http://fkbvl.baihongyu.com/

你可能感兴趣的文章
WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法
查看>>
Centos 安装Apache软件
查看>>
微信小程序中在swiper-item中遍历循环添加多个数据内容(微信小程序交流群:604788754)...
查看>>
java-mybaits-00503-延迟加载
查看>>
看淡你的权力
查看>>
Linux学习(一)
查看>>
[1-5] 把时间当做朋友(李笑来)Chapter 5 【小心所谓成功学】 摘录
查看>>
POJ 3126 Prime Path SPFA
查看>>
Shortest Path [3]
查看>>
离线情报分析工具CaseFile
查看>>
【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用
查看>>
05Hadoop-左外连接
查看>>
python3 识别图片文字
查看>>
文字在div中水平和垂直居中的的css样式
查看>>
cocos creator protobuf实践
查看>>
精品素材:推荐15套非常漂亮的 iOS 图标素材
查看>>
使用HttpSessionListener接口监听Session的创建和失效
查看>>
android 国际化
查看>>
10000单词积累,从今天开始(待续)。。。
查看>>
转Spring+Hibernate+EHcache配置(三)
查看>>