这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
GO基础语言学习笔记1
GO语言优点
C语言的有些语法会让代码可读性降低甚至发生歧义。Go语言在C语言的基础上取其精华,弃其糟粕,将C语言中较为容易发生错误的写法进行调整,做出相应的编译提示。Go语言学习到现在,和其他语言相比去掉了循环冗余的括号,去掉了表达式冗余的括号,具有强制的代码风格,也使我们不再纠结于i++和++i。 在对GO语言的学习中,GO语言的切片让我印象十分深刻,其中
package main
import "fmt"
func main() {
var numbers = make([]int,3,5)
printSlice(numbers)
}
func printSlice(x []int){
fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
代码使用make函数初始化切片s,[]int标识为其元素类型为int的切片,用len()方法来获取切片长度,cap()则可以测量切片最长可以到达多少。以上实例运行结果为len=3 cap=5 slice=[0 0 0]。
GO语言递归函数
还有一个让我印象深刻的就是GO语言递归函数,其中GO语言的递归函数可以实现斐波那契数列,代码如下
package main
import "fmt"
func fibonacci(n int) int {
if n < 2 {
return n
}
return fibonacci(n-2) + fibonacci(n-1) //递归调用
}
func main() {
var i int
for i = 0; i < 10; i++ {
fmt.Printf("%d\t", fibonacci(i))
}
}
最后输出结果就得到了斐波那契数列的值。
GO语言并发
GO语言还支持并发,只需要通过关键字开启goroutine即可。GO允许使用GO语句开启一个新的运行期线程,即 goroutine,以一个不同的、新创建的goroutine来执行一个函数。同一个程序中的所有goroutine共享同一个地址空间。如下例
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
执行之后输出的hello和world是没有固定先后顺序的,这是因为是两个goroutine在执行。