Uber Go 语言编程规范:使用 go.uber.org/atomic
通过sync/atomic 包的原子操作对原始类型s(int32
, int64
, 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相关推荐
- Uber Go 语言编程规范
相信很多人前两天都看到 Uber 在 github 上面开源的 Go 语言编程规范了,原文在这里:https://github.com/uber-go/guide/blob/master/style. ...
- Uber Go 语言编程规范:避免语义不明确的参数(Naked Parameters)
函数调用中的意义不明确的参数(Naked parameters )可能会影响可读性,当参数名称的含义不明显时,请为参数添加 C 样式注释 (/* ... */) Bad // func printIn ...
- Uber Go 语言编码规范
Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter.其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap.jaeger 等.2 ...
- 【转载】Uber Go语言编码规范
文章目录 Uber Go语言编码规范 一. 介绍 二. 指导原则 指向interface的指针 接收器(receiver)与接口 零值Mutex是有效的 在边界处拷贝Slices和Maps 接收Sli ...
- 华为c语言编程规范_C语言编程规范
一.简介 代码编写规则应该在建立一个工程项目之前,应该贯穿整个项目的始终,以保证代码的一致性.采用标准的代码编写惯例,可以大大简化项目的维护负担.采用一种好的风格,以达到以下目的:可移植性.连贯.整洁 ...
- c语言编程题一空几分,C语言编程规范试题
C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...
- 定义变量和常量的规范 c语言,C语言编程规范教材及练习(标识符命名与定义 变量 宏、常量 表的达式).pptx...
C语言编程规范教材及练习(标识符命名与定义 变量 宏.常量 表的达式) C语言编程规范教材C语言编程规范工作组 201104目录标识符命名与定义 变量宏.常量表达式标识符的命名要清晰原则3.1 标识符 ...
- C/C++语言编程规范
目录 前言 一.文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 头文件依赖 1.4 包含文件的次序 1.5 目录结构 二.程序的版式 2.1 空格还是制表位 2.2 空行 2.3 代 ...
- C语言编程规范 学习笔记
C语言编程规范 一.代码总体原则 1.清晰 2.简洁 3.选择适合的风格,与代码原有风格保持一致 二.头文件 背景 术语定义 原则 2.1 头文件中适合放置接口的声明,不适合放置实现 原则 2.2 头 ...
最新文章
- BeanUtils工具包操作JavaBean
- JSDOM模型的样例
- 【入门基础】conda+jupyter玩转数据科学环境搭建
- 作家百态之二:山南海北
- 从ASM拷贝文件的方法
- Vysor 2.1.x Pro使用
- [转]Linq查询DataTable,DataRow
- android Measurespec测量模式
- centos 7 安装donet core2.0环境
- 第九周 项目一--猴子选大王(数组版)
- ubuntu安装vmware12出现cannot ope dev/vmmon及modprobe vmmon提示密钥无效的解决办法
- SAP CO生产订单的标准成本、计划成本、实际成本和目标成本
- CA Server证书申请与颁发 Apache2 HTTPS
- 掌握web开发基础系列--物理像素、逻辑像素、css像素
- 如何从Windows 10注销其他用户
- 码元速率的盲估计-包络谱法
- 神经网络中BP算法的推导
- 2018-2019-2 20189212 《网络攻防技术》第二周作业
- java 填充pdf_Java创建和填充PDF表单域方法
- Angular4 失焦与点击冲突处理
热门文章
- Python学习:简单的python “hello,world”程序
- 使用sunshine+moonlight 实现电脑串流到电视(Android 设备)低延迟投屏
- 思维-思维方法:思维方法
- word2vec:基于层级 softmax 和负采样的 Skip-Gram
- signature=2850cfcfebaece38f3ee6f56047eb922,A characteristic metabolic signature of breast cancer
- Typer Girl安装补丁DLC
- 美容院共享系统开发|共享模式具体应该怎么去做?
- TPLinker实体关系抽取新范式TPLinker:单阶段联合抽取,并解决暴漏偏差~
- HOW TO LEECH USING IRC
- 了解衡量网络性能的四大指标:带宽、时延、抖动、丢包