如何将go通道值存储到其他数据类型(字符串,字节[])中,并将其重新分配给其他go通道
//目标-->将str(或某些字节[])转换为通道变量newpipe。 在制作xml时,我必须将数据从一个进程传输到另一个进程。 Xml marshall不支持chan类型也不能与接口{}一起使用 然后在从其他进程接收到响应xml后,将值分配给newpipe,并使用newpipe进行通道通信如何将go通道值存储到其他数据类型(字符串,字节[])中,并将其重新分配给其他go通道,go,Go,//目标-->将str(或某些字节[])转换为通道变量newpipe。 在制作xml时,我必须将数据从一个进程传输到另一个进程。 Xml marshall不支持chan类型也不能与接口{}一起使用 然后在从其他进程接收到响应xml后,将值分配给newpipe,并使用newpipe进行通道通信 func main() { mypipe := make(chan int) fmt.Printf("My pipe addr %p \n", mypipe) str := fmt.
func main() {
mypipe := make(chan int)
fmt.Printf("My pipe addr %p \n", mypipe)
str := fmt.Sprintf("%p", mypipe) //way to convert mypipe to byte[]
var newpipe chan int
}
我正在寻找各种类型的转换一天,但没有一个与chan类型工作下面的代码将一个传入字符串转换为一个传出字节片。希望这就是你想要的:
package main
import "fmt"
func stringToByteSlice(sc chan string, bc chan []byte) {
defer close(bc)
for s := range sc {
bc <- []byte(s)
}
}
func main() {
strings := []string{"foo", "bar", "baz", "bat"}
byteSlices := [][]byte{}
sc := make(chan string)
bc := make(chan []byte)
go func() {
defer close(sc)
for _, s := range strings {
sc <- s
}
}()
go stringToByteSlice(sc, bc)
for b := range bc {
byteSlices = append(byteSlices, b)
}
fmt.Printf("%v\n", byteSlices)
}
主程序包
输入“fmt”
func stringToByteSlice(sc chan字符串,bc chan[]字节){
延迟关闭(bc)
对于s:=范围sc{
bc我觉得你想得太多了,你到底想做什么?那不行,你要么1.用1“开始”处理rabbitmq/子进程或使用多个go进程并使用套接字的进程。@据我所知,有人建议每个实例都应该使用套接字进行通信,以便与其他子系统进行通信。但请解释为什么我的方法不起作用。在特定进程的内存空间中分配了一个通道,这是您无法做到的在进程之间共享。让我们来看看我的目标是让任何类型的通道(字符串,[]字节)现在作为通道返回内存地址。将该地址存储到字符串或[]字节。创建另一个相同类型的通道(字符串,[]字节),现在将内存地址分配给该通道。@user2383973可以这样做(我认为)使用unsafe
和reflect
软件包,但它基本上消除了Go的类型安全性。请看一看。我猜您是从错误的角度来处理这个问题的。请看一看。