package main
import("fmt""strconv""time")functest(){for i :=1;i <=10;i++{
fmt.Println("test()hello,world"+strconv.Itoa(i))
time.Sleep(time.Second)}}funcmain(){gotest()//开启一个协程for i :=1;i <=10;i++{
fmt.Println("main()hello,golang"+strconv.Itoa(i))
time.Sleep(time.Second)}}//如果主线程退出了,协程还没有执行完毕,也会退出
package main
import("fmt")type Cat struct{
Name string
Age int}funcmain(){//定义一个存放任何数据类型的管道 3个数据
allChan :=make(chaninterface{},3)
allChan<-10
allChan<-"tom jack"
cat := Cat {"小花猫",4}
allChan<-cat
//将前两个推出<-allChan
<-allChan
newcat :=<-allChan
fmt.Printf("newcat=%T newCat=%v\n",newcat,newcat)//fmt.Printf("newCat.Name=%v",newCat.Name)//编译不给过,使用类型断言
a := newcat.(Cat)
fmt.Printf("newCat.Name=%v",a.Name)}
管道的关闭和遍历
package main
import("fmt")//channel的关闭可以使用内置函数close,当channel关闭后,就不能再像channel写数据了,但是可以从channel读取数据funcmain(){
intChan :=make(chanint,3)
intChan<-10
intChan<-20close(intChan)//intChan<-300
n1 :=<-intChan
fmt.Println("n1="n1)}
package main
import"fmt"funcmain(){//遍历管道
intChan :=make(chanint,100)for i :=0;i <100;i++{
intChan<-i*2}//遍历管道不能使用普通的for循环//在遍历时,如果channel没有关闭,会出现deadlock的错误//在遍历时,如果channel已经关闭,会正常遍历,遍历完后会退出遍历close(intChan)for v :=range intChan {
fmt.Println("v=\n",v)}}