有關channel的相關知識總結(1)

1.channel的特點
  1. 類似Unix中的管道(pipe)
  2. 先進先出,類似隊列
  3. 線程安全,多個goroutine同時訪問,不需要加鎖
  4. channel是有類型的,一個整數的channel只能存放整數
  5. 多個goroutine之間通過channel進行通信
  6. 支持任何類型
  7. channel在使用之前必須先進行初始化
2.channel的聲明
  1. int類型的聲明

        var intchan chan int
    	intchan = make[chan int,10]
    	intchan<-10	
    
  2. map類型的聲明

        var mapchan chan map[string]string
    	mapchan = make(chan map[string]string, 10) 
    	m := make(map[string]string, 16)
    	m["stu01"] = "001"
    	m["stu02"] = "002"
    	mapchan <- m
    
  3. struct類型的聲明

     	type student struct {
              name string
         }
         func main(){
     	     var stuChan chan student
    	     stuChan = make(chan student, 10)
    	     stu := student{name: "stu01"}
    	     stuChan <- stu
    	 }
    
  4. interface類型的聲明

     var stuChan chan interface{}
     stuChan = make(chan interface{}, 10)
     stu := student{name: "stu01"}
     //在stuchan中寫入指針類型的stu
     stuChan <- &stu
    
     var stu01 interface{}
     //讀取stuchan中的內容
     stu01 = <-stuChan
     fmt.Println(stu01)
    

輸出結果:

&{stu01}

  1. interface類型轉成struct類型

     	type student struct {
               name string
          }
          func main(){
      	     var stuChan chan interface{}
     		stuChan = make(chan interface{}, 10)
     		stu := student{name: "stu01"}
     		stuChan <- &stu
    
     		var stu01 interface{}
     		stu01 = <-stuChan
    
     		//將interface轉成具體的類型
     		var stu02 *student
     		//推薦:使用OK判斷是否轉成功,否則如果不是轉的類型,程序容易崩
     		stu02, ok := stu01.(*student)
     		if !ok {
     			fmt.Println("can not convert")
     			return
     		}
     		fmt.Println(stu02)
     	 }
    

輸出結果:

&{stu01}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章