go语言学习-未分类的一些记录
2016-07-15 00:00
399 查看
条件语句
for 平行赋值
用于前后互换// Reverse a for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 { a[i], a[j] = a[j], a[i] ← 这里也是 }
swich
swich 条件语句并不是必须的可以//将条件判断放入case中 switch { case 0 <= Num && Num <= 3: fmt.Printf("0-3") case 4 <= Num && Num <= 6: fmt.Printf("4-6") case 7 <= Num && Num <= 9: fmt.Printf("7-9") case 10,11,12: fmt.Println("10-12") }
单个case中,可以出现多个结果选项 case 1,2,3
与C语言等规则相反,Go语言不需要用break来明确退出一个case;
只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case;
可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同。
不定参数
形如...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。它是一个语法糖(syntactic sugar),即这种语法对语言的功能并没有影响,但是更方便程序员使用。通 常来说,使用语法糖能够增加程序的可读性,从而减少程序出错的机会。
从内部实现机理上来说,类型...type本质上是一个数组切片,也就是[]type,
但从调用方来说,情形则完全不同:
myfunc2([]int{1, 3, 7, 13}) //[]type myfunc(1, 3, 7, 13) //...type //传递 myfunc3(args...) // 按原样传递 myfunc3(args[1:]...) // 传递片段,实际上任意的int slice都可以传进去 //使用interface{} 传递任意参数 func Printf(format string, args ...interface{}) {}
init
所有init函数都在同一个goroutine内执行所有init函数结束后才会执行main.main函数
defer
defer语句的调用是遵照先进后出的原则,即最后一个defer语句将最先被执行。只不过,当你需要为defer语句到底哪 个先执行这种细节而烦恼的时候,说明你的代码架构可能需要调整一下了。//可以使用匿名函数进行整体清理 defer func() { // 做你复杂的清理工作 } ()
golang的defer精析
defer是在return之前执行的
defer确实是在return之前调用的。但表现形式上却可能不像。本质原因是return xxx语句并不是一条原子指令,defer被插入到了赋值 与 RET之前,因此可能有机会改变最终的返回值。
判断实现接口
在代码中使用形如下列这样的代码可以确保接口一定被实现,不然会报错type Handler interface { ServeMsg(*Context) } var _ Handler = HandlerFunc(nil) // 确保实现接口 type HandlerFunc func(*Context) func (fn HandlerFunc) ServeMsg(ctx *Context) { fn(ctx) }
包
包文档
每个包都应该有包注释,在package 前的一个注释块。对于多个文件的包,包注释只要出现在任意一个文件前都可以,go doc 生成时就可以显示。range
range 可以用来迭代数组,字符串,切片,映射和通道。go GC
Go有GOGC变量,也可以通过runtime/debug包中的SetGCPercent函数来控制。Go 调整 GC 参数
相关文章推荐
- Django的搜索路径与Import机制
- Django的模板渲染(render)机制
- Django模板的include机制
- 理解Django里的MTV开发模式
- GO语言range的用法
- pgoneproxy的VIP机制
- go语言beego框架 orm实现insertOrUpdate功能
- 大话设计模式(golang) 五、工厂方法模式
- 【题】【线段树】NKOJ 2052 【USACO 2013 January Gold】座位
- golang
- go发送邮件
- Pokémon GO国内玩不了?腾讯AR专家教你自己做!
- Categorical, Ordinal, Interval - 变量之间的区别
- Google 推出全新的两步验证机制
- Google Guava中Preconditions的用法,让前置条件判断变得更优雅
- A Neural Algorithm of Artistic Style
- 使用Google开源tesseract OCR用语言库报allow_blob_division解决方案
- 使用了google zxing作为二维码生成工具
- AWS-GO-SDK NOTES
- Golang 通关初级(2)