前言
在极客上看了蔡超老师的Go语言课程 随手记下来的一些随笔,Go的基础应用及实例, 系列内容比较偏基础,推荐给想要入门Go语言开发者们阅读。
目录如下
Go语言基础学习 (一) - 变量 常量已经与其他语言的差异
Go语言基础学习 (二) -Go语言中的类型转与Go语言中的数组切片
Go语言基础学习 (三) - Go语言内的 Map声明使用与工厂模式
Go语言基础学习 (四) - Go语言函数简单介绍
Go语言基础学习 (五) - 面向对象编程
Go语言基础学习 (六) - 编写一个好的错误处理
Go语言基础学习 (七) - 包(package)
Go语言基础学习 (八) - 并发编程
-
Go语言内的函数与其他语言的差异一个简单的例子func returnMultiValues(b int,a int)(int,int) { // 定义一个函数,并定义函数的返回值类型 return rand.Intn(b),rand.Intn(a) } func TestFn( t *testing.T) { a,b := returnMultiValues(10,1) t.Log(a,b) }使用装饰性函数来创建一个获取一个函数的运行时间,类似于面向对象的装饰性函数func TestFn( t *testing.T) { tsFS := timeSpent(slowFun) // 返回新的函数 t.Log(tsFS(10)) // 包装后的函数 } func slowFun(op int) int { time.Sleep(time.Second *2) return op } //. inner 为匿名函数 func timeSpent(inner func(op int) int ) func(op int)int { // 在函数下在包一层写执行代码 return func(n int) int { start := time.Now() ret := inner(n) // 获取匿名函数的执行结果,最后return出匿名函数的结果 fmt.Println("time spent:",time.Since(start).Seconds()) return ret } }函数可变参数func TestVarParam( t * testing.T) { t.Log(Sum(1,2,3)) // 结果为所有参数所相加的和 } func Sum(ops ... int) int { // 使用 ... 来代表参数为多个 ret := 0 for _,k := range ops { ret += k } return ret } -
defer函数在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等) ,为了在函数执行完毕后,及时的释放资源,Go 的设计者提供 defer (延时机制)。func Clear() { fmt.Println("Clear resources.") } func TestDefer(t * testing.T) { defer Clear() fmt.Println("Start") }运行结果
Start
Clear resources.defer 函数调用的执行时机是外层函数设置返回值之后, 并且在即将返回之前