***

使用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 杂项笔记的更多相关文章

  1. 杂项-笔记-VS:VS2019笔记

    ylbtech-杂项-笔记-VS:VS2019笔记 1.返回顶部 1. http://www.ddooo.com/softdown/142335.htm 2. 2.返回顶部   3.返回顶部   4. ...

  2. perl 学习杂项笔记

    ### 由于perl 语法属于很自由的那种, 建议出现错误的时候打开 -w 或者使用 -Mdiagnositics 试一下 ### 如何调试 perl程序 http://www.ibm.com/dev ...

  3. UCOS 杂项 笔记

    1.  建立任务和建立数据队列  哪个先建立? 经过试验得知,数据队列和任务的建立先后没有顺序,都可以正常运行. 2.关于主函数的面试问题. 主函数写法有:   int  main()    和voi ...

  4. 一些css杂项笔记

    div[class*="col-"]{ background-color: gold; border: 1px solid #ccc; } //给class开头等于col-的div ...

  5. shell 其他杂项知识点笔记

    // 其他杂项知识点 对于普通用户,Base shell 默认的提示符是美元符号$:对于超级用户(root 用户),Bash Shell 默认的提示符是井号# ------- \#!是一个约定的标记, ...

  6. 杂项-SpringEureka:笔记-1

    ylbtech-杂项-SpringEureka:笔记-1 1.返回顶部 1. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT ...

  7. 《你必须知道的495个C语言问题》读书笔记之第15-20章:浮点数、风格、杂项

    一.可变参数列表 1. Q:为什么调用printf前必须要包含<stdio.h>? A:为了把printf的正确原型说明引入作用域.例如,如果可变参数的调用比固定参数的调用效率低,编译器就 ...

  8. MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置

    文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...

  9. 《python核心编程》笔记——杂项

    python语句默认会给每一行添加一个换行符,只要在最后加一个逗号就能改变这种行为 若函数里没有return就自动返回None对象 PEP(python增强提案简称)http://python.org ...

随机推荐

  1. 初探hook的键盘获取

    初探hook的键盘获取 import pyHook import pythoncom class e(): keyIsPressed = False #键盘是否按下 按住.. def onKeyDow ...

  2. Zabbix通过与微信、钉钉整合实现实时告警

    abbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信.钉钉作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警 ...

  3. MySQL安装及配置最详细教程

    https://blog.csdn.net/Mxdon_on/article/details/89461513 概述 MySQL作为最常用的数据库,手动安装的方法还是稍微有些弯弯 首先下载安装包 (官 ...

  4. Socket与系统调用深度分析

    学习一下对Socket与系统调用的分析分析 一.介绍 我们都知道高级语言的网络编程最终的实现都是调用了系统的Socket API编程接口,在操作系统提供的socket系统接口之上可以建立不同端口之间的 ...

  5. 图文结合深入理解JS中的this值

    文章目录 Js 中奇妙的this值 1. 初探this 2. this指向总结 2.1 普通函数调用 2.2 对象的方法调用 2.3 构造函数调用 2.4 利用call,apply,bind方法调用函 ...

  6. 开源日志框架Exceptionless使用教程

    Exceptionless是一款日志记录框架,它开源.免费.提供管理界面.易于安装和使用.ExceptionLess底层采用ElasticSearch作为日志存储,提供了快速.丰富的查询API,方便我 ...

  7. 使用react-app-rewired和customize-cra对默认webpack自定义配置

    最近在学习react框架,之前一直都是用vue 开发,知道在vue 中知道如何配置一下相关的webpack 有助于开发,学react 过程中,我也在想这些该怎么配置啊,所以就有这篇文章. 这篇文章主要 ...

  8. Reproduction CVE_2019_0708

    Xx_introduction Please protection,respect,love,"China's Internet Security Act"! For learni ...

  9. Sql: Oracle paging

    --书分类目录kind --涂聚文 Geovin Du create table geovindu.BookKindList ( BookKindID INT PRIMARY KEY, BookKin ...

  10. npm 镜像配置

    npm 默认 registry:https://registry.npmjs.org/  npm中文文档:https://www.npmjs.cn   淘宝 NPM 镜像:https://npm.ta ...