原文链接: http://blog.csdn.net/cnsword/article/details/17039073

记录一下学习go语言的一些知识点,网上go语言的入门教程很多,也有对某个点深入分析的教程,这篇文章不是入门教程只是对于学习golang过程中的一些特殊点进行记录,当然这些点是建立在个人(c,c++,python)基础上的。

  1. GOPATH是go查找包的路径,GOROOT是go的安装目录,GOBIN是go build生成的bin的目录
  2. go是强类型语言,类型声明在后边
  3. import . "fmt"开放包内容,import f "fmt" 包别名
  4. var p = fmt.Println 定义函数引用
  5. 空是nil而不是NULL或null
  6. go中没有枚举
  7. const、var和import可以加()来搞定多个
  8. := 不能声明全局变量,只能通过var来声明全局变量
  9. rune = uint,byte = int8
  10. a := [...]int{1, 2, 20: 3}
  11. switch类型比C更多了,省略匹配值后case可以是任意条件语句
  12. 每个文件可以有一个init()函数负责初始化,但不能被显式调用
  13. typedef可以使用type来实现
  14. 函数返回值在后边
  15. func可以返回多个值,也可以直接返回,返回值储存在声明的变量中
  16. 可以为任意的struct增加func,包括内置类型,但是内置类型需要先type typename a_type成一个本地类型
  17. 不定参数通过...type来实现,通过for rangs来取值
  18. if else for可以不加括号,没有while语句
  19. 分号可以省略
  20. 大括号必须在行为
  21. 指针也用.而不用->,指针是这样写的*int,指针不能运算
  22. new是函数用来给指针分配内存,只清零不初始化,new([] int)
  23. make可以初始化切片,map,chan。返回的不是指针,是一个初始化的实例,make([]int, 10, 100)
  24. 没有class,只有struct,多了interface,没有继承和虚函数的概念
  25. struct的变量前没有var
  26. interface中的方法前没有func
  27. T Interface{}定义空接口,空接口可以对应任意类型,可以通过T.(Type)转换到相应类型,这种写法只适用于空接口
  28. interface通过interfacename(*struct)生成一个绑定
  29. string是内置类型
  30. 没有char类型了,使用byte,字符串直接是string
  31. 操作string可以借助strings包
  32. panic对应catch,defer对应try,而恢复运行需要revcover
  33. chan默认是阻塞的非阻塞他哦难过select + default来实现,或者借助time超时来实现,close(channel)关闭chan
  34. NewTimer的time.C只执行一次,而newTicker的ticker.C借助for rang可以循环,ticker.Stop()停止循环
  35. mutex等在sync包中
  36. 原子操作在sync/atomic包中
  37. socket在net包中,net.Listen监听,net.Accept接受,net.Dail建立链接,conn.Close关闭
  38. httpserver用net/http包
  39. 系统调用用os包和syscall包
  40. 与C交互用cgo包
  41. go自己进程见通讯使用,目前go与其他语言程序的进程间通讯需要借助c来实现
  42. //include <stdio.h> 
    import "C"
    import “unsafe”  
    来引入Cgo
  43. cgo申请的内存需要手动释放C.free(unsafe.Pointer(Char))

入门可以看一下皓哥的:http://coolshell.cn/articles/8460.html http://coolshell.cn/articles/8489.html


ps:由于对Docker的强大膜拜,决定探究其源码实现,故,先从go学起。