Learn And Life.

go基础

初涉这门语言,该语言以其高性能并发编程而被程序员们所喜欢,虽然鄙人还没涉足如何很好的去运用这门语言来支持现有的产品性能提升,只是抱着学习的态度,了解一门新的语言有哪些特性,可以为我所用,仅此,写下此篇,来记录自己学习历程!

1
go语言哲学

少即是多,你理解得越好,你将变得越简洁!这里的少和多主要是针对GO和C、C++之间的比较,下面看看Go做了些什么:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
常规的语法(不需要一个符号表来辅助解析)
GC机制(仅仅是GC)
没有头文件
显式依赖关系
没有循环依赖
数字常量仅仅是数字(没有类型)
int和int32不是同种类型
字母大小写将确定可见性
任何类型都可以有方法(没有类)
没有子类型继承(没有子类)
包级别的初始化和良好定义的初始化顺序
同一个包的文件一起编译
包级别的全局定义可以以任意顺序进行
没有算术类型转换(常量可以弥补)
接口是隐式实现的(没有”implements”声明)
嵌入的结构体(没有类型提升和子类)
方法像函数一样定义(不必定义在特殊的地方)
方法就是函数
接口就是方法(没有数据)
方法仅仅靠名字匹配(不是靠类型)
没有构造函数和析构函数
后置增量/减量运算符仅仅是语句,而不是表达式
没有前置增量/减量运算符
赋值号是语句,不是表达式
表达式求值顺序在赋值和函数调用时确定(没有所谓的”sequence point”)
没有指针算术
内存总是初始化为0
对本地变量取地址是合法的
方法中没有叫this的指针
分段式栈
没有常量或其它类型的注记
没有模板
没有异常
内建字符串,切片和映射(map)
数组边界检查

Doug Mcilroy,Unix管道的最终发明人,在1964年(!)写道:

1
我们应该有一些机制能将程序耦合(串)起来,像花园软管那样——当我们需要另一种方式传送数据时,拧紧另外一段即可。 I/O也可以这么做。

如果C++和Java注重类型继承和类型系统的分类学,那么Go就注重组合,是一门关于(功能上的)组合和(调用上的)耦合的语言。写这些,只是为了便于理解go语言是什么,便于更快的理解go语言

1
go语言特性

1.自动垃圾回收
2.更丰富的内置类型
3.函数多返回值
4.错误处理
5.匿名函数和闭包
6.类型和接口
7.并发编程
8.反射
9.语言交互性

….以后补充….

1
go语言初步

…..以后补充…..

1
go语言开源项目

1.cache2go
https://github.com/muesli/cache2go
比较简单的一个缓存库,代码量很少,适合新手学习,可以学习到锁、goroutines等

2.groupcache
https://github.com/golang/groupcache
与memcached同一作者,相当于是memcached的go语言实现

3.nsq
https://github.com/bitly/nsq
消息分发平台,阅读代码可以了解到很多分布式、负载均衡等方面的编程

4.docker
https://github.com/docker/docker
成为了高手后可以研究下其实现

5.go语言开发工具集
https://github.com/golang/go/wiki/Projects