Golang Go语言中请问这个 if else 哪里不对了

发布于 1周前 作者 phonegap100 来自 Go语言

Golang Go语言中请问这个 if else 哪里不对了

刚刚入门,写了个通道不断收发的实例,不过说语法不对。

package main
import "fmt"
import "time"
func sender(ch chan int){
    for i:=0;i<100;i++{
        ch<-i
        time.Sleep(time.MillSecond)
        //ch<-i+1
    }
}

func main() {

    ch:=make(chan int)
    go sender(ch)

    for {
        data,ok:=<-ch
        if ok!=nil {
            fmt.Println("data=",data)

            if data==50 {
                break
            }

       }

        else {
        fmt.Println("No data")
        }
    }

    fmt.Println("Done")
}


把这个注释了就能正常运行: else { fmt.Println("No data") }


更多关于Golang Go语言中请问这个 if else 哪里不对了的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

21 回复

这里不对。不能这样写。

更多关于Golang Go语言中请问这个 if else 哪里不对了的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


大佬请指教

好嘛,抖个机灵的功夫帖子编辑了,这回得硬着头皮来解答了…

你等我半小时,我去现学 golang 装好环境再来装逼…

channel 返回的第二个参数是 bool 类型,不能和 nil 比较;

把 if ok!=nil 改成 if !ok 就可以运行了;

(代码逻辑没看,只看了语法错误)

两个写法都可以,我最开始也是用的!ok,也报 else 的错,用!=nil 也还是包 else 那里的错

![image.png]( https://i.loli.net/2021/03/07/joyYVbAOM8eI3cW.png)

1 、毫秒拼错了
2 、else 网上挪放在 if 右括号右边



1.必须使用 !ok,channel 返回的是 bool 类型,不是指针,你怎么能和 nil 比较?
2.Golang 要求 else 必须在 if 右括号右边,不可另起一行,美其名曰:“优雅”

else 要跟 if 右括号 在一行

用 IDE 来给代码 format 啊喂!

谢谢大佬,就是那个 else 的括号问题。
初学没用 ide,用 vim 撸的
谢谢大神

另外这个程序会死锁,哪位大神讲讲啊,我不是搞 go 的

把 if ok!=nil 改为 if ok ,data==99 就不会死锁



他的代码写反了,应该是:if ok,如果存在数据;

所以死锁是因为原来的代码仅仅在新的 goroutine 中调用了一次 sender(ch),但是下面的代码是死循环的 for ;
上面调用 sender(ch)的 goroutine 结束后,程序只剩下一个 for,最终 goroutine 渴死;

下面的代码就没问题了;

go<br><br>package main<br><br>import (<br> "fmt"<br> "time"<br>)<br><br>func sender(ch chan int) {<br> for i := 0; i &lt; 100; i++ {<br> ch &lt;- i<br> time.Sleep(time.Millisecond)<br> //ch&lt;-i+1<br> }<br>}<br><br>func main() {<br> ch := make(chan int)<br><br> go sender(ch)<br><br> for {<br> data, ok := &lt;-ch<br> if ok {<br> fmt.Println("data=", data)<br> if data == 50 {<br> break<br> }<br> } else {<br> fmt.Println("No data")<br> }<br> }<br><br> fmt.Println("Done")<br>}<br>

啊啊啊啊啊 没注意看写反了 十分感谢您的代码

vs code 大法啊,vim 插件,golang 插件,妥妥的。

说实话,golang 对于 IDE 的需求不是那么大(不如 Java,Java 手动控制目录、导入等等要晕死;甚至不如 Python,Python 几乎所有错误都在运行时,并且错误提示根本没有任何启发性)
实际使用中优雅不见得,no distraction 倒是真的。

不会死锁,是死循环了吧。

哦我没发现 sender 是有限循环(

怎么应用在下载网页,谁给个例子

刚学的话还是下个 IDE 吧,能省不少事。上学学 C 的时候没被 include 坑过吗?

在Golang(Go语言)中,if-else语句是基本的条件控制结构。如果你遇到了问题,可能是由以下几个常见原因引起的:

  1. 语法错误:确保ifelse if(如果有)、else关键字后都有正确的条件表达式,并且表达式以布尔值结束。例如:

    if x > 0 {
        // do something
    } else if x == 0 {
        // do something else
    } else {
        // handle other cases
    }
    
  2. 缺少花括号:在Go中,即使ifelse块中只有一条语句,也需要使用花括号{}来明确代码块的范围。

  3. 作用域问题:在if-else块中声明的变量,其作用域仅限于该块内。如果试图在块外访问这些变量,会导致编译错误。

  4. 逻辑错误:检查条件逻辑是否按预期工作。例如,条件表达式可能使用了错误的运算符或比较了错误的变量。

  5. 类型错误:确保条件表达式中的操作数类型兼容,进行比较或运算时不会引发类型错误。

如果以上检查都无误,但问题依旧存在,请提供具体的代码片段,以便进一步分析。在Go语言中,if-else结构本身相对简单直接,问题往往出在细节或上下文环境中。

回到顶部