# regexp 包
简单模式
ok, _ := regexp.Match(pat, []byte(searchIn))
先返回正则对象 `Compile` 方法返回一个 Regexp 对象
re, _ := regexp.Compile(pat)
str := re.ReplaceAllString(searchIn, "##.#")
# 锁和 sync 包
在一些复杂的程序中,通常通过不同线程执行不同应用来实现程序的并发。
当不同线程要使用同一个变量时,经常会出现一个问题:
无法预知变量被不同线程修改的顺序!(这通常被称为资源竞争,指不同线程对同一变量使用的竞争)
显然这无法让人容忍,那我们该如何解决这个问题呢?
`sync.Mutex` 是一个互斥锁,它的作用是守护在临界区入口来确保同一时间只能有一个线程进入临界区
在 sync 包中还有一个 RWMutex 锁:他能通过 RLock() 来允许同一时间多个线程对变量进行读操作,但是只能一个线程进行写操作。如果使用 Lock() 将和普通的 Mutex 作用相同。包中还有一个方便的 Once 类型变量的方法 once.Do(call),这个方法确保被调用函数只能被调用一次
# 精密计算和 big 包
# 自定义包和可见性
当写自己包的时候,要使用短小的不含有 `_`(下划线) 的小写单词来为文件命名
导入包的格式:
import 的一般格式如下: import "包的路径或 URL 地址"
**导入外部安装包:** go install
**包的初始化:**
程序的执行开始于导入包,初始化 main 包然后调用 main 函数。
# 为自定义包使用 godoc
godoc -http=:6060 -goroot="."