golang语言特性:
1. 垃圾回收 a. 内存自动回收,不需要开发人员管理内存,开发人员专注业务实现 b. 只需要new分配内存,不需要释放 2. 天然并发 a. 从语言层面支持并发,非常简单 b. goroute,轻量级线程,使创建成千上万个 goroute 成为可能 c. 基于CSP(Communicating Sequential Process)模型实现
第一个go程序: helloworld.go
package main // go每一个文件都属于一个包;package 关键字说明这个文件是一个包;想让这个包成为一个可执行文件,包名必须为 main // 导入输出的包 import( "fmt" ) // go 语言的代码被编译时,每行最后会自动加一个 “;” // 定义变量a 为整型,变量b为整型;规定返回值 也是 整型 func add(a int,b int) int { var sum int // 定义一个变量 sum 为整型 sum = a + b return sum } // go 代码执行的时候会从 main 函数开始执行; main 是入口函数 func main(){ var c int c = add(100,200) // 定义的变量 c 必须有被引用才能通过编译 fmt.Println("add(100,200)=", c) fmt.Println("hello world") }
goroute 测试程序:
helloworld.go
package main import( "time" // 导入时间函数 ) func main() { for i := 0; i < 100; i++ { // sum := a +b // sum := 这种定义变量的方式会根据 = 后面的变量 自动把 sum 定义成 int 整型 // 调用 test_goroute 函数 go test_goroute(i) // test_goroute 函数和 main 函数 都在 main 这同一个包里面,此时包名可以省略 // go test_goroute(i) 是并发运行的 } // 主函数运行在一个 goroute 里面,然后又起了100个goroute;主进程这个 goroute 要等待 那100个子进程执行完 time.Sleep(time.Second) // sleep 1 秒 }
test.go
package main // test.go 文件也是在 main 这个包里面 import ( "fmt" ) func test_goroute(a int) { fmt.Println(a) }
终端显示如图:
原文:https://www.cnblogs.com/neozheng/p/11148974.html