Go In Action 读书笔记 三

并发

Go语言里的并发是指让某个函数可以独立于其他函数运行的能力. 当一个函数创建为goroutine时, Go会将其视为一个独立的工作单元. 这个工作单元会被调度到可用的逻辑处理器上执行.

Go的运行时调度器可以管理所有创建的goroutine, 并为其分配执行时间. 这个调度器在操作系统之上, 将操作系统的线程与逻辑处理器绑定, 并在逻辑处理器执行goroutine. 调度器可以在任何给定的时间, 全面控制哪个goroutine在哪个逻辑处理器上运行.

Go的并发同步模型来自一个叫做通信顺序进程(Communicating Sequential Processes, CSP). CSP是一个消息传递模型, 通过在goroutine之前传递数据来传递消息, 不需要通过加锁实现同步访问. 用于在goroutine间传递消息的数据结构叫做通道(channel).

并发与并行

操作系统的线程(thread)和进程(process).

进程类似应用程序在运行中需要用到和维护的各种资源的容器. 资源包括但不限于: 内存(来自文件系统的代码和数据), 句柄(文件, 设备, 操作系统), 线程.

Go In Action 读书笔记 二

Go语言的类型系统

Go语言是静态类型的变成语言. 编译的时候需要确定类型.

用户定义的类型

type user struct {
    name    string
    email   string
    ext     int
    privileged  bool
}

使用 零值和结构字面量初始化

//引用类型, 各个字段初始化为对应的零值
var bill user #{  0 false}
//创建并初始化, 使用结构字面量
lisa := user{ //{Lisa lisa@email.com 123 true}
    name: "Lisa",
    email: "lisa@email.com",
    ext: 123,
    privileged: true,
}

结构字面量的赋值方式:

  • 不同行声明每一个字段和对应的值, 字段名和字段以:分隔, 末尾以,结尾
  • 不适用字段名, 只声明对应的值. 写在一行里, 以,分隔, 结尾不需要,. 要保证顺序
lisa := {"Lisa", "lisa@email.com", 123, true}

Go In Action 读书笔记 一

架构流程图

关键字

var

变量使用var声明, 如果变量不是定义在任何一个函数作用域内, 这个变量就是包级变量.

Go语言中, 所有变量都被初始化为其零值. 对于数值类型, 其零值是0; 对于字符串类型, 其零值是空字符串”"; 对于布尔类型, 其零值是false. 对于引用类型来说, 底层数据结构会被初始化对应的零值. 但是被生命被起零值的引用类型的变量, 会返回nil作为其值.

const

定义常量

interface

声明接口

func

声明函数

defer

安排后面的函数调用在当前函数返回时才执行.

file, err = os.open("filePath")
if err != nil
    return
defer file.close()
# more file operation

自定义GOPATH下安装godep失败

我的环境变量是这样的: export GOROOT=/usr/local/go export GOPATH=/Users/addo/Workspaces/go_w export GOBIN=$GOROOT/bin export PATH=$PATH:$GOBIN 使用下面的命令安装报错: go get -v github.com/tools/godep github.com/tools/godep (download) github.com/tools/godep/vendor/github.com/pmezard/go-difflib/difflib github.com/tools/godep/vendor/github.com/kr/fs github.com/tools/godep/vendor/github.com/kr/text github.com/tools/godep/vendor/golang.org/x/tools/go/vcs github.com/tools/godep/vendor/github.com/kr/pretty github.com/tools/godep go install github.com/tools/godep: open /usr/local/go/bin/godep: permission denied 默认是安装到$GOBIN目录下, 权限不够