## 一、概念
* 只需要在語句前添加go關鍵字,就可以創建并發執行單元
* 開發?員無需了解任何執?細節,調度器會自動將其安排到合適的系統線程上執行
* 如果主協程退出了,其他任務不在執行
## 一、創建協程
~~~
package main
import (
"fmt"
"time"
)
//子協程
func newTask() {
i := 0
for {
i++
fmt.Printf("new goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}
func main() {
//啟動子協程
go newTask()
i := 0
for {
i++
fmt.Printf("main goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}
~~~
注意:子協程和主協程不相關
## 二、如果主協程退出了,其他任務不在執行
~~~
package main
import (
"fmt"
"time"
)
func main() {
go func() {
i := 0
for {
i++
fmt.Printf("new goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}()
i := 0
for {
i++
fmt.Printf("main goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
if i == 2 {
break
}
}
}
~~~
## 三、main函數中只有協程不會執行代碼
~~~
package main
import (
"fmt"
"time"
)
func main() {
go func() {
i := 0
for {
i++
fmt.Printf("new goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}()
}
~~~
執行結果:
- 一、數組
- 二、切片
- 三、copy
- 四、MAP
- 五、結構體
- 六、結構體參數
- 七、面向”對象“
- 1、匿名字段
- 2、方法
- 3、包和封裝
- 4、接口
- 5、異常處理
- 八、Json
- 九、文件操作
- 1、寫文件
- 2、讀取文件內容
- 3、拷貝文件
- 十、反射
- 1、查看類型,字段和方法
- 2、查看匿名字段
- 3、修改基本類型的值
- 4、修改結構體的值
- 5、調用方法
- 十一、并發編程
- 1、并行和并發
- 2、協程
- 3、runtime包
- 5、channel的使用
- 6、close
- 7、定時器
- 8、select
- 9、協程同步鎖
- 十二、socket編程
- 十三、Http編程
- 十四、并發爬蟲和數據處理
- 1、簡易爬蟲實例
- 2、并發爬取圖片
- 3、讀文件中的數據
- 4、數據清洗
- 其他
- 1、推薦文章