Loading

摘要: 39.1 Go的panic不是Java的checked exception 1.checked exception实质是错误,而panic是异常 2.API调用者没有义务处理panic 3.未被捕获的panic意味着“游戏结束” 39.2 panic的典型应用 1.充当断言角色,提示潜在bug // 阅读全文
posted @ 2024-02-28 21:08 brynchen 阅读(7) 评论(0) 推荐(0) 编辑
摘要: Go在最初设计时就有意识地选择了使用显式错误结果和显式错误检查 38.1 两种观点 显式的错误处理方式让Go程序员首先考虑失败情况,这将引导Go程序员在编写代码时处理故障,而不是在程序部署并运行在生产环境后再处理。而为反复出现的代码片段if err != nil {...}所付出的成本已基本被在故障 阅读全文
posted @ 2024-02-28 21:04 brynchen 阅读(29) 评论(0) 推荐(0) 编辑
摘要: C语言家族的经典错误机制:错误就是值。同时Go结合函数/方法的多返回值机制避免了像C语言那样在单一函数返回值种承载多重信息的问题。 37.1 构造错误值 错误处理的策略与构造错误值的方法是密切关联的。 错误是值,只是以error接口变量的形式统一呈现(按惯例,函数或方法通常将error类型返回值放在 阅读全文
posted @ 2024-02-27 13:08 brynchen 阅读(14) 评论(0) 推荐(0) 编辑
摘要: atomic包提供了两大类原子操作接口:一类是针对整型变量的,包括有符号整型、无符号整型以及对应的指针类型;另一个类是针对自定义类型的。 atomic包十分适合一些对性能十分敏感、并发量较大且读多写少的场合。如果要对一个复杂的临界区数据进行同步,那么首选依旧是sync包中的原语。 36.1 atom 阅读全文
posted @ 2024-02-25 11:34 brynchen 阅读(8) 评论(0) 推荐(0) 编辑
摘要: Go语言通过标准库的sync包提供了针对传统基于共享内存并发模型的基本同步原语。 35.1 sync包还是channel 在下面一些场景下,我们依然需要sync包提供的低级同步原语 (1) 需要高性能的临界区同步机制场景 (2) 不想转移结构体对象所有权,但又要保证结构体内部状态数据的同步访问的场景 阅读全文
posted @ 2024-02-25 11:14 brynchen 阅读(14) 评论(0) 推荐(0) 编辑
摘要: c := make(chan int) // 创建一个无缓冲(unbuffered)的int类型的channel c := make(chan int, 5) // 创建一个带缓冲的int类型的channel c <- x // 向channel c中发送一个值 <- c // 从channel c 阅读全文
posted @ 2024-02-24 15:52 brynchen 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 不要通过共享内存来通信,而应该通过通信来共享内存。——Rob Pike 33.1 Go并发模型 CSP(Communicating Sequential Process,通信顺序进程)模型。一个符合CSP模型的并发程序应该是一组通过输入/输出原语连接起来的P的集合。 Go始终推荐以CSP模型风格构建 阅读全文
posted @ 2024-02-24 14:50 brynchen 阅读(26) 评论(0) 推荐(0) 编辑
摘要: Go的运行时负责对goroutine进行管理,所谓的管理就是“调度”。调度就是决定何时哪个goroutine将获得资源开始执行,哪个goroutine应该停止执行让出资源,哪个goroutine应该被唤醒恢复执行等。 32.1 goroutine调度器 将goroutine按照一定算法放到CPU上执 阅读全文
posted @ 2024-02-22 09:39 brynchen 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 31.1 并发与并行 1.并行方案 在处理器核数充足的情况下启动多个单线程应用的实例 2.并发方案 重新做应用结构设计,即将应用分解成多个在基本执行单元(例如操作系统线程)中执行的、可能有一定关联关系的代码片段 goroutine:由Go运行时负责调度的用户层轻量级线程,相比传统操作系统线程而言具有 阅读全文
posted @ 2024-02-21 18:58 brynchen 阅读(10) 评论(0) 推荐(0) 编辑
摘要: Go语言有一个惯例是让单元测试代码时刻伴随着你编写的Go代码。 单元测试是自包含和自运行的,运行时一般不会依赖外部资源(如外部数据库、外部邮件服务器等),并具备跨环境的可重复性(既可在开发人员的本地运行,也可以在持续集成的环境中运行)。 30.1 实现一个附加免责声明的电子邮件发送函数 v1版本实现 阅读全文
posted @ 2024-02-20 13:24 brynchen 阅读(2) 评论(0) 推荐(0) 编辑