go

  1. go
  2. 环境安装
  3. godoc
  4. feature
  5. 编程风格
  6. chan
  7. 正则
  8. Go的框架
  9. 简单常用
  10. 工具
  11. lib/package

go

effective go 简洁,全

环境安装

  1. brew install go 当前版本 1.11.0
    1. 安装后用go env查看环境信息
  2. 编辑环境:
    1. goland,搜索安装,需要付费或者破解;
    2. 或者vscode+go plugin 熟悉了后,这个也挺好用

godoc

1
godoc -http=:6060

使用这个可以写出良好的代码+文档(注释文档是代码的一部分)

feature

  1. 编译为本地代码,运行较快;可选静态编译,把依赖都打入可运行程序,简单,并且能减少对系统环境依赖
  2. 简洁
    1. 无类(class)概念,替代的是较简洁的struct
    2. 代码格式要求严格;gofmt工具会被自动应用
    3. 语法上的简洁:贴近于最常用的基本功能
      1. 类型不能隐式转换(这不是优点,只是特色)
      2. 更强的switch语句
      3. 不支持泛型(非优点)
    4. 工具
      1. go run src../main.go
      2. go build -race src../main
      3. go test -v
    5. 强制约定
      1. GOPATH及相关路径
      2. 大写字母开头的变量和函数是Public的
  3. 协程,小于线程,非系统资源,由框架调度,并且使用方便
  4. 函数first:参数,变量,返回值都可以是函数
    1. 但它不支持函数式编程(只能模拟,非友好支持)
      1. 不可变性,不能有状态,只有常量和函数

重要概念

  1. 数组
    • 数组是值。将一个数组赋值给另一个,会拷贝所有的元素。
    • 特别是,如果你给函数传递一个数组,其将收到一个数组的拷贝,而不是它的指针。
    • 数组的大小是其类型的一部分。类型[10]int和[20]int是不同的。
  2. 切片(slice)对数组进行封装
    • 切片持有对底层数组的引用,如果你将一个切片赋值给另一个,二者都将引用同一个数组。
  3. map持有对底层数据结构的引用。
  4. append内置函数所做的事情是将元素添加到切片的结尾,并返回结果。需要返回结果,是因为和我们手写的Append一样,底层的数组可能会改变
  5. Go中的常量仅仅就是—常量。它们是在编译时被创建
  6. 每个源文件可以定义自己的不带参数的(niladic)init函数。init是在程序包中所有变量声明都被初始化,以及所有被导入的程序包中的变量初始化之后才被调用。

需要深入理解的

  1. 传值还是传指针
  2. 同名package?
    1. main包的导入路径是无关紧要的
    2. *_test.go由go test命令独立编译
    3. 同名包使用别名来处理冲突
    4. 匿名导入包,使用占位符作为别名
  3. interface{}是空接口,任何对象都实现了空接口,所以 interface{}可以引用任何对象
  4. interface类型变量包含了两个指针,分别指向实际变量的值(value)和类型(对应concrete type)

编程风格

  1. 驼峰式命名
  2. 在所在范围内尽量简单
  3. 尽早return
  4. 尽可能有好的godoc
  5. 带mutex的struct必须是指针
  6. golang不推荐统一处理异常,要手动处理每一个返回的错误

chan

类似Java的同步队列。通过提供原子的通信原语,避免了竞态情形(race condition)下复杂的锁机制。

详细参考

  1. 不带缓存
    1. 写入第二个会被阻塞
    2. 写入方关闭,读取方会返回0值
    3. 往已经关闭的chan写入,panic
    4. 从已经关闭的chan读取,0值
  2. 带缓存
    1. 写:直到缓冲区写满后,写才会阻塞
    2. 写:写入已经关闭的管道,panic
    3. 读:缓冲区读空,读端阻塞
    4. 读:读已经关闭的管道,不会阻塞,
      1. 如果还有值,那么返回缓存的值
      2. 如果没有值,那么立即返回0值
操作 nil chan closed chan not-closed not-nil chan
close panic panic succ
写 ch<- 一直阻塞 panic 阻塞或成功写入
读 <-ch 一直阻塞 读取对应类型零值 阻塞或成功读取数据
1
v, ok := <-ch

chan

正则

正则详解

Go的框架

go的框架gin、beego、xorm等等

csp

简单常用

1
2
3
4
type:main.Power 
value:{10 178 NewMan}
value+:{age:10 high:178 name:NewMan}
value#:main.Power{age:10, high:178, name:”NewMan”}

工具

1.

lib/package

自带go list std

  1. fmt
  2. os:跨平台操作
  3. io
  4. io/ioutil
  5. math
  6. math/rand
  7. log
  8. bufio:处理数据的输入输出
  9. net
  10. net/http
  11. unicode/utf8
  12. image
  13. image/color
  14. image/gif
  15. path
  16. path/filepath
  17. encoding/json
  18. encoding/xml
1

常用三方


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com

💰

×

Help us with donation