golang语言特征
第一个go程序
//1)go语言以包作为管理单位
//2)每个文件必须先声明包
//3)程序必须有一个main包
package main
import "fmt"
func main(){//左括号必须和函数名同行
//调用函数,大部分都需要导入包
//hello go打印到屏幕会自动换行
fmt.Println("hello go")
}
golang语言特性
1.垃圾回收
a.内存自动回收,不需要开发人员管理内存
b 只需要new分配内存,不需要释放
2.天然并发
a 从语言层面支持并发,非常简单
b goroute,轻量级线程,创建成千上万个goroute成为可能
c 基于CSP模型
例:
package main
import
"fmt"
func add(a int,b int)int{
var sum int
sum = a + b
return sum
}
func test(a int)int{
fmt.Println(a)
return 0
}
func main(){
c :=add(100,200)//自动定义变量
for i:=0;i<100;i++{
go test(i)//并发执行,相当于fork(),所以打印的数字是乱的
}
fmt.Println("c=",c)
}
结果;
3. channel
a 管道,类似unix/linux中的pipe
b 多个goroute之间通过channel进行通信
c 支持任何类型
例:
package main
import(
"fmt"
)
func main(){
pipe := make(chan int,3)//定义一个大小为3的管道,管道类似于队列,先进先出,一头进一头出
pipe <- 1//向管道中添加元素,其中的符号像一个箭头
pipe <- 2
pipe <- 3
var b int
b =<- pipe//取出管道中的一个元素,由先进先出,取出的元素为1
pipe <- 4//将4放入管道
fmt.Println(b)
fmt.Println(len(pipe))//打印管道的长度
}
附加:
在终端中使用gofmt -w [文件名]可使代码对齐
例:
func main() {
pipe := make(chan int, 3) //定义一个大小为3的管道,管道类似于队列,先进先出,一头进一头出
pipe <- 1 //向管道中添加元素,其中的符号像一个箭头
pipe <- 2
pipe <- 3
var b int
b = <-pipe //取出管道中的一个元素,由先进先出,取出的元素为1
pipe <- 4 //将4放入管道
fmt.Println(b)
fmt.Println(len(pipe)) //打印管道的长度
}
在终端使用命令后: