go 杂项笔记
***
使用go build编译该程序,注意这里需要指定 -gcflags "-N -l" 关闭编译器优化,否则编译器可能把对sum函数的调用优化掉。
bobo@ubuntu:~/study/go$ gobuild -gcflags"-N -l"sum.go
***
go fmt命令——格式化代码文件
https://studygolang.com/articles/18538?fr=sidebar
***
通道-chan
发送端关闭通道,而不应该在接收端关闭通道,否则会引起panic
***
通道的特性就是它的自同步和其元素值的原子性。
在 go 语言的并发程序中,通道会成为联系各个Goroutine的纽带。
在需要循环的接收通道中的元素值的场景下,应该优先使用 for 语句来实现:
var ch chan int
if ch != nil{
for ch != range ch {
fimt.Printf("Element: %v\n",e)
}
}
select 语句中,default case 会在收发操作无法配对的情况下被选中并执行。
代码包 time 中的定时器(time.Timer)和 断续器(time.Ticker)都充分利用了缓冲通道的异步特性来传达到期事件。
*** 锁
go 语言中,死锁错误的发生几率极低。其主要原因是有defer 语句的存在。
在 Go 语言中,读写锁有结构体类型 sync.RWMutex 代表。与互斥锁类似,sync.RWMutex类型的零值就已经是立即可用的读写锁了。在此类型的方法集合中包含了两对方法,即:
func (*RWMutex) Lock
func (*RWMutex) Unlock
和
func (*RWMutex) RLock
func (*RWMutex) RUnlock
前一对方法的名称和签名与互斥锁的那两个方法完全一致。它们分别代表了对写操作的锁定和解锁。以下简称它们为写锁定和写解锁。
而后一对方法则分别表示了对读操作的锁定和解锁,以下简称它们为读锁定和读解锁。
写解锁在进行的时候会试图唤醒所有因欲进行读解锁而被阻塞的Goroutine。而读解锁在进行的时候只会在已无任何读锁定的情况下试图唤醒一个因欲进行写锁定而被阻塞的Goroutine。若对一个未被写锁定的读写锁进行解锁,就会引起一个运行时恐慌,而对一个未被读锁定的读写锁进行读解锁不会发生 panic。
原则上,不应该把通道当作互斥锁或信号灯来使用。
《effective go》
gofmt 格式化 go 源文件
go 文件注释:
------------------------------------------------------------------------------------------------------
/*
regexp 包为正则表达式实现了一个简单的库。
该库接受的正则表达式语法为:
正则表达式:
串联 { '|' 串联 }
串联:
{ 闭包 }
闭包:
条目 [ '*' | '+' | '?' ]
条目:
'^'
'$'
'.'
字符
'[' [ '^' ] 字符遍历 ']'
'(' 正则表达式 ')'
*/
package regexp
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
在程序中,每个可导出(首字母大写) 的名称都应该有文档注释。
------------------------------------------------------------------------------------------------------
命名:
大写首字母,包外可见。
包应当以小写的单个单词来命名,且不应该使用下划线或驼峰记法。
获取器:若你有个名为 owner (小写,未导出) 的字段,其获取器应当名为 Owner(大写,可导出) 而非 GetOwner。 设置器方法,SetOwner .
Go 中约定使用驼峰记法(匈牙利命名法) MixedCaps 或 mixedCaps 。
以指针或值为接收者的区别在于:值方法可通过指针和值调用,而指针方法只能通过指针来调用。
若该值是可寻址的, 那么该语言就会自动插入取址操作符来对付一般的通过值调用的指针方
法。在我们的例子中,变量 b 是可寻址的,因此我们只需通过 b.Write 来调用它的 Write 方
法,编译器会将它重写为 (&b).Write
用空白标识符声明一个全局变量:
var _ json.Marshaler = (*RawMessage)(nil)
检测json.Marshaler 的实现情况。
go 杂项笔记的更多相关文章
- 杂项-笔记-VS:VS2019笔记
ylbtech-杂项-笔记-VS:VS2019笔记 1.返回顶部 1. http://www.ddooo.com/softdown/142335.htm 2. 2.返回顶部 3.返回顶部 4. ...
- perl 学习杂项笔记
### 由于perl 语法属于很自由的那种, 建议出现错误的时候打开 -w 或者使用 -Mdiagnositics 试一下 ### 如何调试 perl程序 http://www.ibm.com/dev ...
- UCOS 杂项 笔记
1. 建立任务和建立数据队列 哪个先建立? 经过试验得知,数据队列和任务的建立先后没有顺序,都可以正常运行. 2.关于主函数的面试问题. 主函数写法有: int main() 和voi ...
- 一些css杂项笔记
div[class*="col-"]{ background-color: gold; border: 1px solid #ccc; } //给class开头等于col-的div ...
- shell 其他杂项知识点笔记
// 其他杂项知识点 对于普通用户,Base shell 默认的提示符是美元符号$:对于超级用户(root 用户),Bash Shell 默认的提示符是井号# ------- \#!是一个约定的标记, ...
- 杂项-SpringEureka:笔记-1
ylbtech-杂项-SpringEureka:笔记-1 1.返回顶部 1. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT ...
- 《你必须知道的495个C语言问题》读书笔记之第15-20章:浮点数、风格、杂项
一.可变参数列表 1. Q:为什么调用printf前必须要包含<stdio.h>? A:为了把printf的正确原型说明引入作用域.例如,如果可变参数的调用比固定参数的调用效率低,编译器就 ...
- MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置
文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...
- 《python核心编程》笔记——杂项
python语句默认会给每一行添加一个换行符,只要在最后加一个逗号就能改变这种行为 若函数里没有return就自动返回None对象 PEP(python增强提案简称)http://python.org ...
随机推荐
- A.Changing Volume
题目:改变音量 题意:给定两个数a和b,有6个操作(-5, -2, -1, +1, +2, +5),求a变到b的最小操作次数 操作的过程中不能变到小于0,即音量不能调到小于0 分析: (贪心),我们可 ...
- Ceph 提供iSCSI存储
Tgtd+Ceph部署 一.yum安装tgt [root@c720181 ~]# yum --enablerepo=epel -y install scsi-target-utils libxslt ...
- linux—chmod
chmod -options -c 只输出被改变的文件信息 -f , --silent, --quite 当chmod不能改变文件模式时,不通知用户 -R 递归 ...
- Python3 猜年龄小游戏进阶之函数处理
在猜年龄的基础上编写登录.注册方法,并且把猜年龄游戏分函数处理 登录函数 注册函数 猜年龄函数 选择奖品函数 # 注册 def register(): '''注册''' count = 0 while ...
- 【Java Web开发学习】Spring JPA
[Java Web开发学习]Spring JPA 转载:https://www.cnblogs.com/yangchongxing/p/10082864.html 1.使用容器管理类型的JPA JND ...
- ORA-19625: error identifying file
问题描述:rman进行备份的时候,出现报错ORA-19625,无效的文件 1.进行数据库备份,然后就出现了报错,没有这个24号的归档日志 RMAN> run{ 2> allocate ch ...
- 三、Vue 的一些语法样例
前言 其实vue 的语法在官网上都有详细的讲解和例子,我这里就不多做什么说明,只是把自己学习这些语法是练习的例子贴出来.另外官网上的例子是一个个的html文件.我这里的是一个的vue 文件,通过不同的 ...
- hdu 2089 不要62 (数位dp基础题)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- python连接数据库使用SQLAlchemy
参考python核心编程 ORM(Object Relational Mapper),如果你是一个更愿意操作Python对象而不是SQL查询的程序员,并且仍然希望使用关系型数据库作为你的后端,那么你可 ...
- 关于EXIT和BADI增强的查找
EXIT出口的查找: 方法一: 第一步:通过SE30,输入TCODE(例如ME21N),执行EXCUTE,前台创建一张采购订单.点击TIMES页签,查找EXIT开头的SAP程序. 第二步:这些fun ...