前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言学习-未分类的一些记录 原

go语言学习-未分类的一些记录 原

作者头像
solate
发布2019-07-19 18:39:17
3330
发布2019-07-19 18:39:17
举报
文章被收录于专栏:solate 杂货铺solate 杂货铺

条件语句

for 平行赋值

用于前后互换

代码语言:javascript
复制
// 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 条件语句并不是必须的可以

代码语言:javascript
复制
//将条件判断放入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,

但从调用方来说,情形则完全不同:

代码语言:javascript
复制
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语句到底哪 个先执行这种细节而烦恼的时候,说明你的代码架构可能需要调整一下了。

代码语言:javascript
复制
//可以使用匿名函数进行整体清理
defer func() {
// 做你复杂的清理工作
} ()

golang的defer精析

defer是在return之前执行的

defer确实是在return之前调用的。但表现形式上却可能不像。本质原因是return xxx语句并不是一条原子指令,defer被插入到了赋值 与 RET之前,因此可能有机会改变最终的返回值。

判断实现接口

在代码中使用形如下列这样的代码可以确保接口一定被实现,不然会报错

代码语言:javascript
复制
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 参数

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 条件语句
    • for 平行赋值
      • swich
      • 不定参数
      • init
      • defer
      • 判断实现接口
        • 包文档
        • range
        • go GC
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档