英文:
Does not recognize string variable coming from a channel in a Switch statement golang
问题
这个函数通过将m作为参数传递给goroutine来调用。
m中传递的值是字符串:"01a",而Switch语句无法识别。
func myfunc(m string, c chan string) {
defer close(c)
switch m {
case "01a":
msg_out = "NO PASS"
}
c <- msg_out
}
当将m设置为"01a"时,Switch正常工作。
func myfunc(m string, c chan string) {
defer close(c)
m = "01a"
switch m {
case "01a":
msg_out = "PASS"
}
c <- msg_out
}
我怀疑通道可能会引入其他隐藏字符。
英文:
This function is called from a goroutine by passing as parameter m.
The value sent in m is the string: "01a" and the statement Switch does not recognize
func myfunc(m string, c chan string) {
defer close(c)
switch m {
case "01a":
msg_out = "NO PASS"
}
c <- msg_out
}
when set m the Switch works fine
func myfunc(m string, c chan string) {
defer close(c)
m = "01a"
switch m {
case "01a":
msg_out = "PASS"
}
c <- msg_out
}
I suspect the channel will introduce other hidden characters
答案1
得分: 1
你的代码的意图不清楚,提供的代码是无效的。在提供的两个示例中,你都没有显示尝试从通道中读取数据,两个示例都是根据字符串进行切换,然后将一个新值赋给未声明的msg_out变量,并将该值发送到通道中。
没有完整的代码,无法确定你出错的地方。下面是一个简单的示例,演示了如何将文本发送到通道并再次读取出来。希望这能澄清过程,并确认字符串可以正常通过通道发送。
如果你仍然无法使其工作,我认为你需要发布完整的代码示例以获得帮助。
package main
import (
"log"
"time"
)
func main() {
// 创建通道
strChan := make(chan string)
// 启动一个goroutine来监听通道
go func(strChan chan string) {
// 循环等待通道上的输入
for {
select {
case myString := <-strChan:
// 在这里运行接收到字符串时的代码
// 根据字符串的实际内容进行切换
switch myString {
case "I'm the expected string":
log.Println("收到了预期的字符串")
default:
log.Println("不是我要找的字符串")
}
}
}
}(strChan)
// 等待一段时间,然后在通道上发送一个字符串
time.Sleep(time.Second * 2)
strChan <- "I'm the expected string"
// 再次等待,给通道响应的机会
time.Sleep(time.Second * 2)
}
英文:
It's not clear what your code is trying to do, the code provided is invalid.
You haven't shown any attempt to read from the channel in either example provided, both examples switch on a string then assign a new value to msg_out (which is not declared) and send that value down a channel.
Without the full code it's impossible to tell where you are going wrong, here is a simple example of sending text down a channel and reading it off again. Hopefully this will clarify the process and confirm that strings are sent over channels just fine.
If you still cant get it working, I think you will need to post full code example to get help.
package main
import (
"log"
"time"
)
func main() {
//make the channel
strChan := make(chan string)
//launch a goroutine to listen on the channel
go func(strChan chan string) {
//loop waiting for input on channel
for {
select {
case myString := <-strChan:
// code to be run when a string is recieved here
// switch on actual contents of the string
switch myString {
case "I'm the expected string":
log.Println("got expected string")
default:
log.Println("not the string I'm looking for")
}
}
}
}(strChan)
//sleep for a bit then send a string on the channel
time.Sleep(time.Second * 2)
strChan <- "I'm the expected string"
//wait again, gives channel response a chance to happen
time.Sleep(time.Second * 2)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论