go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!
2017-05-16 16:05
1316 查看
内置函数
Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:len、cap 和 append,或必须用于系统级的操作,例如:panic。因此,它们需要直接获得编译器的支持。以下是一个简单的列表,我们会在后面的章节中对它们进行逐个深入的讲解。
名称 | 说明 |
---|---|
close | 用于管道通信 |
len、cap | len 用于返回某个类型的长度或数量(字符串、数组、切片、map 和管道);cap 是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map) |
new、make | new 和 make 均是用于分配内存:new 用于值类型和用户定义的类型,如自定义结构,make 用于内置引用类型(切片、map 和管道)。它们的用法就像是函数,但是将类型作为参数:new(type)、make(type)。new(T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针(详见第 10.1 节)。它也可以被用于基本类型:v := new(int)。make(T) 返回类型 T 的初始化之后的值,因此它比 new 进行更多的工作(详见第 7.2.3/4 节、第 8.1.1 节和第 14.2.1 节)new() 是一个函数,不要忘记它的括号 |
copy、append | 用于复制和连接切片 |
panic、recover | 两者均用于错误处理机制 |
print、println | 底层打印函数(详见第 4.2 节),在部署环境中建议使用 fmt 包 |
complex、real imag | 用于创建和操作复数(详见第 4.5.2.2 节) |
6.10 使用闭包调试
当您在分析和调试复杂的程序时,无数个函数在不同的代码文件中相互调用,如果这时候能够准确地知道哪个文件中的具体哪个函数正在执行,对于调试是十分有帮助的。您可以使用runtime或
log包中的特殊函数来实现这样的功能。包
runtime中的函数
Caller()提供了相应的信息,因此可以在需要的时候实现一个
where()闭包函数来打印函数执行的位置:
where := func() { _, file, line, _ := runtime.Caller(1) log.Printf("%s:%d", file, line) } where() // some code where() // some more code where()
您也可以设置
log包中的 flag 参数来实现:
log.SetFlags(log.Llongfile) log.Print("")
或使用一个更加简短版本的
where函数:
var where = log.Print func func1() { where() ... some code where() ... some code where() }
计算函数执行时间
有时候,能够知道一个计算执行消耗的时间是非常有意义的,尤其是在对比和基准测试中。最简单的一个办法就是在计算开始之前设置一个起始时候,再由计算结束时的结束时间,最后取出它们的差值,就是这个计算所消耗的时间。想要实现这样的做法,可以使用time包中的
Now()和
Sub函数:
start := time.Now() longCalculation() end := time.Now() delta := end.Sub(start) fmt.Printf("longCalculation took this amount of time: %s\n", delta)
摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/06.10.md
相关文章推荐
- 简单了解Go语言中函数作为值以及函数闭包的使用
- 举例讲解Go语言中函数的闭包使用
- go语言笔记——调试还很弱,用gdb来做?可用panic和defer。格式化代码使用gofmt,貌似我的vim插件是自带
- 你猜对了么?一个函数考察Go 语言闭包、defer的用法
- go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针
- 举例讲解Go语言中函数的闭包使用
- JS学习笔记1——不要使用JavaScript内置的parseInt()和Number()函数,利用map和reduce操作实现一个string2int()函数
- 使用 Go 构建一个解释型语言
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(转)
- Go语言的beego框架中的orm中的Read函数使用
- Go 语言使用WaitGroup个人笔记记录
- go语言web框架 beego初步使用笔记
- 32位汇编语言学习笔记(41)--fgets等函数的使用
- go语言笔记——是c开发的 lex yacc进行词法和语法分析,go不支持函数和运算符重载,不支持类型继承,也不支持断言,还有泛型
- go语言笔记——切片函数常见操作,增删改查和搜索、排序
- 调试使用了函数模块的程序时需要注意的一个小问题
- 19.笔记go语言——使用Mysql驱动
- 25.笔记go语言——PostgrelSQL数据库使用
- MySQL使用什么函数可以将出现的NULL改为一个默认值?
- Go语言笔记:base64/sha1的使用