摘要:
## 前期工作 经过一个多月陆陆续续的忙碌与等待: 1. 申请域名 2. 填写域名关联个体等信息 3. 阿里云初步审核 4. 工信部短信核验 5. 工信部审核 6. 管局审核 7. ICP 备案成功 8. 网安备案审核 9. 网站安全报告编写与提交 10. 网站安全报告审核 11. 网站全部审核通过 阅读全文
摘要:
互斥锁 对于任一共享资源,同一时间保证只有一个操作者,这种方法称为 互斥机制。 关键字 Mutex 表示互斥锁类型,它的 Lock 方法用于获取锁,Unlock 方法用于释放锁。在 Lock 和 Unlock 之间的代码,可以读取和修改共享资源,这部分区域称为 临界区。 错误的并发操作 先来看一个错 阅读全文
摘要:
概述 建议先阅读 range, 阻塞通道, 非阻塞通道 等小节。 range 除了可以遍历字符串、切片、数组等数据结构外,还可以遍历通道。 语法规则 和遍历其他数据结构不同,遍历通道时没有 索引 的概念,只有值,语法如下: for v := range ch { // v 是从通道接收到的值 // 阅读全文
摘要:
概述 建议先阅读 阻塞通道 和 非阻塞通道 小节。在前面的两个小节中, 为了最小化代码达到演示效果,省略了 关闭通道 的步骤, 正确的做法应该是在通道使用完成后关闭。 使用规则 通过关键字 clsoe 关闭通道。 1. 关闭一个空的通道 (值为 nil) 时,panic 2. 关闭一个非空 && 已 阅读全文
摘要:
概述 建议先阅读 goroutine 小节。 Go 箴言: 不要通过共享内存来通信,而要通过通信来共享内存。 goroutine 是 Go 程序并发执行的实体,channel (通道) 则是它们之间的连接,用于多个 goroutine 之间互相通信。通道可以让一个 goroutine 发送特定类型值 阅读全文
摘要:
概述 goroutine 是 Go 程序并发执行的实体,对于初学者来讲,可以简单地将 goroutine 理解为一个 超轻量的线程。 当一个程序启动时,只有一个 goroutine 调用 main 函数,称为 主 goroutine, 当 main 函数返回时, 所有 goroutine 都会终止 阅读全文
摘要:
概述 比较运算符 用来比较两个操作数并返回一个 bool 值,常见的比较运算符: == 等于 != 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 在任何比较中,第一个操作数必须可以赋值给第二个操作数的类型,反过来也一样。 不可比较类型 Go 中有 3 种数据类型不能比较,分别是 sli 阅读全文
摘要:
零值 当一个变量使用 var 进行声明后并未进行初始化 (变量后面没有赋值符 =) 操作,会默认分配一个零值 (zero value)。 不同类型对应的零值 | 类型 | 零值 | | | | | bool | false | | int | 0 | | float | 0 | | string | 阅读全文
摘要:
判断是否实现接口 Go 里面没有 implements 关键字来判断一个结构体 (对象) 是否实现了某个接口, 要实现类似的功能, 需要用到 类型断言。 类型断言 // 判断 v 是否实现了接口 i // 返回值 ok 为 true 表示已实现,ok 为 false 表示未实现 if _, ok : 阅读全文
摘要:
概述 init() 函数 是一个特殊的函数,一般称为初始化函数,不能被调用。 在每个文件里面,当程序启动或者文件被作为包引用的时候, init() 函数就会自动执行,一般用来做一些包的初始化操作。 语法规则 init() 函数 没有参数,也没有返回值。 func init() { // do som 阅读全文