Go-channel

channel管道

image

复制package main

import "fmt"

func main() {
	intChan := make(chan int, 3)
	fmt.Printf("intChan的值%v intChan本身的地址%p\n", intChan, &intChan)
	intChan <- 10
	num := 211
	intChan <- num
	fmt.Printf("len=%v cap=%v\n", len(intChan), cap(intChan))
	num2 := <-intChan
	fmt.Printf("num2=%v\n", num2)
	fmt.Printf("len=%v cap=%v\n", len(intChan), cap(intChan))
}

image

放任意类型的空接口(类型断言)

复制package main

import "fmt"

type Cat struct {
	Name string
	Age  int
}

func main() {
	allChan := make(chan interface{}, 3)
	allChan <- 10
	allChan <- "tom jack"
	cat := Cat{"小花猫", 4}
	allChan <- cat
	<-allChan
	<-allChan
	newCat := <-allChan
	fmt.Printf("newCat=%T,newCat=%v\n", newCat, newCat)
	a := newCat.(Cat)
	fmt.Printf("newCat.Name=%v\n", a.Name)
}

image

channel的遍历和关闭

复制package main

import "fmt"

func main() {
	intChan := make(chan int, 100)
	for i := 0; i < 100; i++ {
		intChan <- i * 2
	}
	close(intChan)
	for v := range intChan {
		fmt.Println("v=", v)
	}
}

image

goroutine和channel结合

image

image

复制package main

import "fmt"

func writeData(intChan chan int) {
	for i := 1; i <= 50; i++ {
		intChan <- i
		fmt.Println("写入数据", i)
	}
	close(intChan)
}

func readData(intChan chan int, exitChan chan bool) {
	for {
		v, ok := <-intChan
		if !ok {
			break
		}
		fmt.Printf("读到数据=%v\n", v)
	}
	exitChan <- true
	close(exitChan)
}

func main() {
	intChan := make(chan int, 50)
	exitChan := make(chan bool, 1)
	go writeData(intChan)
	go readData(intChan, exitChan)
	for {
		_, ok := <-exitChan
		if !ok {
			break
		}
	}
}

image

posted @   司砚章  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2021-06-11 PyQt5-使用可视化设计窗体的GUI程序
点击右上角即可分享
微信分享提示