一、golang语言特性
1. 垃圾回收
- 内存自动回收,再也不需要开发人员管理内存
- 开发人员专注业务实现,降低了心智负担
- 只需要new分配内存,不需要释放
2. 天然并发
- 从语言层面支持并发,非常简单
- goroutine,轻量级线程,创建成千上万个goroutine成为可能
- 基于CSP(Communicating Sequential Process)模型实现 [goroutine + pipe]
package main
func test_goroute(a int, b int) int {
var test_sum int
test_sum = a + b
return test_sum
}
func main(){
go test_goroute(1,2)
}
package main
import "fmt"
func test_goroute(a int) {
fmt.Println(a)
}
func main() {
for i := 1; i < 100; i++ {
go test_goroute(i)
}
}
3. 管道
- 管道,类似linux中的pipe
- 多个goroutine之间通过channel进行通信
- 支持任何类型
func main() {
// make开辟一个内存,chan为长度为3整型管道
pipe := make(chan int, 3)
// 向管道填值
pipe <- 2
pipe <- 2
pipe <- 2
fmt.Println(len(pipe))
var t int
// 取值
t =<- pipe
fmt.Println(t)
}
// 通过管道求和
package main
import (
"time"
"fmt"
)
func add(a int, b int, c chan int) {
sum := a + b
time.Sleep(3*time.Second)
c <- sum
}
func main() {
var pipe chan int
pipe = make(chan int, 1)
go add(1,2,pipe)
sum := <- pipe
fmt.Println(sum)
}
4. 多返回值
func calc(a int, b int) (int, int){
sum := a + b
avg := (a+b)/2
return sum, avg
}