golang chan数据类型
golang数据类型有基本数据类型: int float long double string 也包含有 struct array map point类型,具体定义是如何使用的
package concurrent import "fmt" //import "time" type People struct { Name string } var channel chan *People func AddPerson(p *People) { channel <- p } func GetPersonInfo() *People { return <-channel } func Start() { //注意通道在使用之前一定要进行初始化操作,否则进行通道的写入或者读取时候将出现错误 // int //var ch chan int // ch = make(chan int) //var ch chan string //ch = make(chan string) //var ch chan float32 //ch = make(chan float32) //var ch chan map[string] string //ch = make(chan map[string]string) //var ch chan People //ch = make(chan People) //var ch chan *People //ch = make(chan *People) channel = make(chan * People) p := People{"冬天"} go AddPerson(&p) v :=GetPersonInfo() fmt.Println("结果是 :",v.Name) }
结果是 : 冬天
二、单通道设置
格式:
定义单向写入
var channelName chan <- ElementType
/ 定义单向读出
var channelName <- chan ElementType
package com
import "fmt"
func Check(wCh <- chan int,rCh chan <- bool) {
va :=<- wCh
fmt.Println(va)
rCh <- true
}
func Start() {
var wCh chan int
wCh = make(chan int) //通道一定要进行初始化
var rCh chan bool
rCh = make(chan bool)////通道一定要进行初始化
go Check(wCh,rCh)
wCh <- 100
fmt.Println(<- rCh)
fmt.Println("com",wCh,rCh)
}
运行结果是:
100 true com 0x11f8e300 0x11f8e340
相关推荐
在Go-golang编程语言中,处理金额和货币格式化是一个重要的任务,特别是在开发财务软件时。Go语言提供了强大的工具和库来帮助开发者有效地处理这些数值。在这个场景中,我们关注的是`accounting`包,它是一个专为Go...
在 Go 语言中,`chan` 是一种非常重要的类型,用于实现 goroutine 之间的通信。一个 `chan` 可以被用来发送和接收数据,而 `close` 函数则可以用来关闭一个 `chan`。一旦 `chan` 被关闭后,就不能再向其发送数据,但...
queue := make(chan string) // 创建一个字符串类型的通道 go func() { for item := range queue { // 从队列中读取数据 // 执行MySQL或Redis操作 } }() go func() { for _, item := range dataItems { queue...
这些知识点涵盖了从基本的数据类型、结构体、切片的使用,到更高级的主题如并发、错误处理、Web框架Beego的应用等。 ### 1. 结构体的定义与使用 在Golang中,可以使用`struct`关键字来定义结构体类型。比如: ```...
- **结构体**:自定义数据类型,由一系列属性组成,例如:`type Person struct { Name string; Age int }`。 ##### 1.5 类型转换 - 在 Go 中,类型转换是显式的,必须通过类型转换操作符来执行。例如,将 `int` ...
Go语言提供了多种数据类型,包括整型(int, uint)、浮点型(float32, float64)、字符串(string)以及布尔型(bool)。例如: ```go var age int = 25 var name string = "张三" var isStudent bool = true ...
在Go中,你可以使用`make`函数创建一个通道,指定其数据类型。例如,创建一个整型通道: ```go ch := make(chan int) ``` 这里的`chan int`表示通道可以传递整型值。 2. **发送与接收操作** 你可以使用`操作...
- **方法**: 当函数与特定的数据类型关联时,它可以被定义为一个方法。方法定义中包含一个接收者(receiver)参数。 ```go func (p myType) funcname(q int) (r, sint) { return 0, 0 } ``` - **函数示例**: ...
`struct`是Golang中用于组合多个字段的数据类型,它可以包含各种不同的数据类型,如整型、字符串、指针等。另一方面,`interface`是一组方法的集合,它定义了一个行为规范。当一个类型实现了接口中所有的方法,我们...
在Golang中,我们通过`make(chan T, size)`来创建一个类型为T的Channel,其中size可选,表示通道的缓冲区大小。例如,下面的代码创建了一个能存储3个整数的通道: ```go ch := make(chan int, 3) ``` 之后,我们...
Golang的并发模型基于CSP(Communicating Sequential Processes)理论,强调通过通信来共享内存,而不是通过共享内存来通信,这有助于避免数据竞争和其他并发问题。 首先,我们来看看Goroutine。Goroutine可以被视...
关于Golang中range指针数据的问题详解 一、引言 在Go语言中,`for range` 是一种常用的迭代机制,它可以用来遍历数组、切片、字符串、通道(channel)、映射(map)等数据结构。然而,在处理指针类型的数据时,`...
1. 静态类型:Go语言是静态类型的,这意味着变量的数据类型在编译时就已经确定,有助于避免运行时错误。 2. 内存管理:Go有内置的垃圾回收机制,简化了内存管理。 3. 结构体和接口:Go中的结构体用于封装数据,接口...
`interface{}`则扮演着Java中的`Object`角色,可以接收任何数据类型。然而,使用`interface{}`需要特别注意类型转换,确保在访问数据时不会出现类型不匹配导致的运行时错误。 另一个关键点是`xfffd`编码问题。在UTF...
channel[通道]是golang的一种重要特性,正是因为channel的存在才使得golang不同于其它语言。channel使得并发编程变得简单容易有趣。 channel的概念和语法 一个channel可以理解为一个先进先出的消息队列。channel用来...
// 当可以从chan1接收数据时,执行这里的代码 case chan2 // 当可以向chan2发送value时,执行这里的代码 default: // 没有任何case可执行时,执行default的代码 } ``` `select`语句让并发编程更加灵活,它可以...
在Golang中,定时器是通过`time`包提供的`Timer`和`Ticker`类型来实现的。`Timer`主要用于一次性触发,而`Ticker`则用于周期性地触发任务。这两种类型的共同特点是它们都基于Go的channel机制工作,使得定时器能够与...
channel 是引用数据类型,需要 make 后才能使用 给管道中写入数据事,不能超过其容量 channel 关闭时,就不能再往里写数据了,读数据是没有问题的 可以使用 for range 遍历管道,但是要先 close 关闭 channel 示例1...
1. **Channels作为消息传递媒介**: 在Go中,channels是用于在goroutines之间安全地传递数据的内置类型。它们可以作为发布者和订阅者之间的桥梁,允许发布者将消息放入channel,而订阅者则从channel中取出消息。 2. ...
2. Done方法返回一个chan struct{}类型的channel,它在Context被取消或超时时会被关闭。这个channel可以用来作为goroutine之间的广播通知,告知它们停止当前的工作。 3. Err方法返回一个error,这个error指示...