通过sync/atomic 包的原子操作对原始类型s(int32int64, etc.) 进行操作的时候,很容易忘记在对变量进行读取和修改的时候,使用原子操作。

而go.uber.org/atomic包通过隐藏基础类型对这些操作增加了类型安全,另外,它还包括了一个方便的atomic.Bool类型。

Bad

type foo struct {running int32  // 原子类型
}func (f* foo) start() {//原子操作if atomic.SwapInt32(&f.running, 1) == 1 {// 已经在运行了return}// start the Foo
}func (f *foo) isRunning() bool {return f.running == 1  // 忘记使用原子操作导致资源竞争
}

Good

type foo struct {running atomic.Bool //使用atomic.Bool类型
}func (f *foo) start() {
//使用Swap(true)进行安全判断if f.running.Swap(true) {// already running…return}// start the Foo
}func (f *foo) isRunning() bool {//使用Load()方法保证安全return f.running.Load()
}

Uber Go 语言编程规范:使用 go.uber.org/atomic相关推荐

  1. Uber Go 语言编程规范

    相信很多人前两天都看到 Uber 在 github 上面开源的 Go 语言编程规范了,原文在这里:https://github.com/uber-go/guide/blob/master/style. ...

  2. Uber Go 语言编程规范:避免语义不明确的参数(Naked Parameters)

    函数调用中的意义不明确的参数(Naked parameters )可能会影响可读性,当参数名称的含义不明显时,请为参数添加 C 样式注释 (/* ... */) Bad // func printIn ...

  3. Uber Go 语言编码规范

    Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter.其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap.jaeger 等.2 ...

  4. 【转载】Uber Go语言编码规范

    文章目录 Uber Go语言编码规范 一. 介绍 二. 指导原则 指向interface的指针 接收器(receiver)与接口 零值Mutex是有效的 在边界处拷贝Slices和Maps 接收Sli ...

  5. 华为c语言编程规范_C语言编程规范

    一.简介 代码编写规则应该在建立一个工程项目之前,应该贯穿整个项目的始终,以保证代码的一致性.采用标准的代码编写惯例,可以大大简化项目的维护负担.采用一种好的风格,以达到以下目的:可移植性.连贯.整洁 ...

  6. c语言编程题一空几分,C语言编程规范试题

    C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...

  7. 定义变量和常量的规范 c语言,C语言编程规范教材及练习(标识符命名与定义 变量 宏、常量 表的达式).pptx...

    C语言编程规范教材及练习(标识符命名与定义 变量 宏.常量 表的达式) C语言编程规范教材C语言编程规范工作组 201104目录标识符命名与定义 变量宏.常量表达式标识符的命名要清晰原则3.1 标识符 ...

  8. C/C++语言编程规范

    目录 前言 一.文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 头文件依赖 1.4 包含文件的次序 1.5 目录结构 二.程序的版式 2.1 空格还是制表位 2.2 空行 2.3 代 ...

  9. C语言编程规范 学习笔记

    C语言编程规范 一.代码总体原则 1.清晰 2.简洁 3.选择适合的风格,与代码原有风格保持一致 二.头文件 背景 术语定义 原则 2.1 头文件中适合放置接口的声明,不适合放置实现 原则 2.2 头 ...

最新文章

  1. BeanUtils工具包操作JavaBean
  2. JSDOM模型的样例
  3. 【入门基础】conda+jupyter玩转数据科学环境搭建
  4. 作家百态之二:山南海北
  5. 从ASM拷贝文件的方法
  6. Vysor 2.1.x Pro使用
  7. [转]Linq查询DataTable,DataRow
  8. android Measurespec测量模式
  9. centos 7 安装donet core2.0环境
  10. 第九周 项目一--猴子选大王(数组版)
  11. ubuntu安装vmware12出现cannot ope dev/vmmon及modprobe vmmon提示密钥无效的解决办法
  12. SAP CO生产订单的标准成本、计划成本、实际成本和目标成本
  13. CA Server证书申请与颁发 Apache2 HTTPS
  14. 掌握web开发基础系列--物理像素、逻辑像素、css像素
  15. 如何从Windows 10注销其他用户
  16. 码元速率的盲估计-包络谱法
  17. 神经网络中BP算法的推导
  18. 2018-2019-2 20189212 《网络攻防技术》第二周作业
  19. java 填充pdf_Java创建和填充PDF表单域方法
  20. Angular4 失焦与点击冲突处理

热门文章

  1. Python学习:简单的python “hello,world”程序
  2. 使用sunshine+moonlight 实现电脑串流到电视(Android 设备)低延迟投屏
  3. 思维-思维方法:思维方法
  4. word2vec:基于层级 softmax 和负采样的 Skip-Gram
  5. signature=2850cfcfebaece38f3ee6f56047eb922,A characteristic metabolic signature of breast cancer
  6. Typer Girl安装补丁DLC
  7. 美容院共享系统开发|共享模式具体应该怎么去做?
  8. TPLinker实体关系抽取新范式TPLinker:单阶段联合抽取,并解决暴漏偏差~
  9. HOW TO LEECH USING IRC
  10. 了解衡量网络性能的四大指标:带宽、时延、抖动、丢包