原文链接: http://blog.csdn.net/cnsword/article/details/17039073
记录一下学习go语言的一些知识点,网上go语言的入门教程很多,也有对某个点深入分析的教程,这篇文章不是入门教程只是对于学习golang过程中的一些特殊点进行记录,当然这些点是建立在个人(c,c++,python)基础上的。
- GOPATH是go查找包的路径,GOROOT是go的安装目录,GOBIN是go build生成的bin的目录
- go是强类型语言,类型声明在后边
- import . "fmt"开放包内容,import f "fmt" 包别名
- var p = fmt.Println 定义函数引用
- 空是nil而不是NULL或null
- go中没有枚举
- const、var和import可以加()来搞定多个
- := 不能声明全局变量,只能通过var来声明全局变量
- rune = uint,byte = int8
- a := [...]int{1, 2, 20: 3}
- switch类型比C更多了,省略匹配值后case可以是任意条件语句
- 每个文件可以有一个init()函数负责初始化,但不能被显式调用
- typedef可以使用type来实现
- 函数返回值在后边
- func可以返回多个值,也可以直接返回,返回值储存在声明的变量中
- 可以为任意的struct增加func,包括内置类型,但是内置类型需要先type typename a_type成一个本地类型
- 不定参数通过...type来实现,通过for rangs来取值
- if else for可以不加括号,没有while语句
- 分号可以省略
- 大括号必须在行为
- 指针也用.而不用->,指针是这样写的*int,指针不能运算
- new是函数用来给指针分配内存,只清零不初始化,new([] int)
- make可以初始化切片,map,chan。返回的不是指针,是一个初始化的实例,make([]int, 10, 100)
- 没有class,只有struct,多了interface,没有继承和虚函数的概念
- struct的变量前没有var
- interface中的方法前没有func
- T Interface{}定义空接口,空接口可以对应任意类型,可以通过T.(Type)转换到相应类型,这种写法只适用于空接口
- interface通过interfacename(*struct)生成一个绑定
- string是内置类型
- 没有char类型了,使用byte,字符串直接是string
- 操作string可以借助strings包
- panic对应catch,defer对应try,而恢复运行需要revcover
- chan默认是阻塞的非阻塞他哦难过select + default来实现,或者借助time超时来实现,close(channel)关闭chan
- NewTimer的time.C只执行一次,而newTicker的ticker.C借助for rang可以循环,ticker.Stop()停止循环
- mutex等在sync包中
- 原子操作在sync/atomic包中
- socket在net包中,net.Listen监听,net.Accept接受,net.Dail建立链接,conn.Close关闭
- httpserver用net/http包
- 系统调用用os包和syscall包
- 与C交互用cgo包
- go自己进程见通讯使用,目前go与其他语言程序的进程间通讯需要借助c来实现
- //include <stdio.h>
import "C"
import “unsafe”
来引入Cgo - cgo申请的内存需要手动释放C.free(unsafe.Pointer(Char))
入门可以看一下皓哥的:http://coolshell.cn/articles/8460.html http://coolshell.cn/articles/8489.html
ps:由于对Docker的强大膜拜,决定探究其源码实现,故,先从go学起。