文档章节

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

solate
 solate
发布于 2016/07/15 15:31
字数 798
阅读 11
收藏 0

条件语句

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 参数

© 著作权归作者所有

共有 人打赏支持
solate
粉丝 8
博文 123
码字总数 107428
作品 0
成都
程序员
私信 提问
Kotlin 编写短视频小应用 - KotlinMvp

《KotlinMvp》 是仿着“开眼Eyepetizer”之前版本并加上自己的想法,开发的一款的短视频小应用,每日为你推荐精选视频,让你大开眼界。本项目采用 Kotlin 语言编写,结合 MVP+RxJava2+Retrof...

徐昊
2017/12/14
193
0
TODO:这是一个我的自媒体

TODO:这是一个我的自媒体 自媒体(外文名:We Media)又称“公民媒体”或“个人媒体”,是指私人化、平民化、普泛化、自主化的传播者,以现代化、电子化的手段,向不特定的大多数或者特定的单...

OneTODO
2016/12/04
3
0
研究显示,用Python更易出现软件缺陷!

  【IT168 资讯】经常会有刚入行的程序员试图比较各大编程语言之间的差别,然后选择自己认为较好的编程语言学习。虽然圈子里公认各大编程语言之间没有好坏之分,只有是否合适,但不知广大程...

it168网站
2017/10/16
0
0
关于在线代码运行网站的一个想法

注:此文想法成于去年12月份,在今年3月份写了一下,现在发出来,结果还没做一点东西,实在是太懒了。。。 前一段时间想学一下web,并顺便构思了一个小东西来试着做做,但到现在也没什么进展...

偃鼠饮河
2013/05/19
0
4
在数据采集器中用TensorFlow进行实时机器学习

最新DataOps平台的真正价值,只有在业务用户和应用程序能够从各种数据源来访问原始数据和聚合数据,并且及时地产生数据驱动的认识时,才能够实现。利用机器学习(Machine Learning),分析师...

【方向】
2018/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 帝国对 Python 的渗透能成功吗?哈哈

引子 Java 帝国已经成立20多年,经过历代国王的励精图治,可以说是地大物博,码农众多。 可是国王依然不满足,整天想着如何继续开拓疆土, 这一天晚上他又把几个重臣招来商议了。 IO大臣说:...

边鹏_尛爺鑫
51分钟前
5
0
分布式事务解决方案框架(LCN)

什么是XA接口 XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口...

群星纪元
今天
6
0
linux 操作系统 常用命令和软件安装

1.系统时间更新 ntpdate time.windows.com 2.传送文件 rsync -av /home/data/a.dat -e ssh root@192.168.0.100:/home 3.传送文件夹 scp -r /home/data root@192.168.0.100:/home 4.JDK安装 ......

WJtiny
今天
2
0
pg_lightool基于basebackup的单表恢复和块恢复

开源软件pg_lightool,实现了基于wal日志的块恢复。详情参见博客:https://my.oschina.net/lcc1990/blog/1931485。由于wal日志中FPW的不确定性,它不能作为一个数据库恢复的解决方案。目前对...

movead
今天
2
0
对比剖析Swarm Kubernetes Marathon编排引擎

Docker Native Orchestration 基本结构 Docker Engine 1.12 集成了原生的编排引擎,用以替换了之前独立的Docker Swarm项目。Docker原生集群(Swarm)同时包括了(Docker Engine \/ Daemons)...

Linux就该这么学
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部