nino's blog

我的读书笔记 我的自留地


  • Home

  • About

  • Tags

  • Categories

  • Archives

Go 反射与interface拾遗

Posted on 2017-10-30 | Edited on 2019-05-26 | In Golang

Go能实现接口的动态性和反射的基础是:编译期为运行时提供了类型信息。interface底层有两种结构,上一节讲了带方法的iface,这一节补充不带方法的eface结构。 interface之efaceGo中的任何对象都可以表示为interface{}。它扮演的角色与C中的void*差不多,区别在于interface{}中包含有类型信息,可以实现反射。 efece数据结构描述:gcdata域用于垃 ...

Go 方法调用与接口

Posted on 2017-10-29 | Edited on 2019-05-27 | In Golang

在比较C++和Go的时候,通常会说到Go不支持继承和多态,但通过组合和接口实现了类似的语言特性。总结一下Go不支持的原因:(1) 首先struct是值类型,赋值和传参都会复制全部内容。struct的内存布局跟C几乎一致,没有任何附加的object信息,比如指向虚函数表的指针。(2)其次Go不支持隐式的类型转换,因此用基类的指针指向子类会编译错误。 Go程序抽象的基本原则依赖于接口而不是实现,优先 ...

Go 函数调用惯例

Posted on 2017-10-26 | Edited on 2019-05-27 | In Golang

对比C++,Go不支持支持重载和默认参数,支持不定长变参,多返回值,匿名函数和闭包。 C入栈顺序和返回值之前有个疑问,为什么Go支持多返回值,而C不行呢。首先回顾一下C函数调用时的栈空间 程序员的自我修养Ch10-2。函数调用时首先参数和返回地址入栈,其次入栈old ebp和需要保存的寄存器,之后是函数内部的局部变量和其他数据。两个指针ebp和esp分别指向返回地址和栈顶。 函数返回值的传递有多 ...

Go Slice与String内存布局和实现

Posted on 2017-10-25 | Edited on 2019-05-26 | In Golang

上一篇提到的关于gc性能的问题,对比slice和map的结构可以看出为了存储数据map用了更多的内存空间,并且可能存在链表,链表的每个节点在gc时都做为一个小对象对待,增加了扫描的时间,因此gc时间相对更长。 slice初始化与复制slice通过内部指针和相关属性引用数组片段,来实现变长方案。实现方式和数据结构都类似C++中的vector。它本身是结构体,作为参数传递时传递的是slice本身而不是 ...

Go Hashmap内存布局和实现

Posted on 2017-10-24 | Edited on 2019-05-27 | In Golang

想了解Go内置类型的内存布局的契机,是一次在调试“不同类型的小对象频繁创建对gc性能的影响”时发现map的gc性能不佳,而作为对比的包含slice的struct却很好。这里总结Go runtime里map的实现,可以解释这个问题。 hash table内部结构Go的map就是hashmap,源码在src/runtime/hashmap.go。对比C++用红黑树实现的map,Go的map是unord ...

Hexo博客搭建与github托管

Posted on 2017-08-25 | Edited on 2019-05-27 | In Hexo

关于Hexo及基本安装Hexo是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在github上。 安装Git,安装Node.js。 在安装目录上新建一个Hexo的文件夹,右键Git-bash,开始安装Hexo。 $ npm install hexo -g$ hexo init blog $ cd blog$ npm install $ hexo server 这时Hex ...

123
nino

nino

26 posts
7 categories
10 tags
GitHub Weibo
© 2020 nino
Powered by Hexo v3.8.0
|
Theme – NexT.Pisces v7.1.1