Golang中https://play.golang.org/p/25swYz6BEtu这段代码让我很困惑

Golang中https://play.golang.org/p/25swYz6BEtu这段代码让我很困惑 https://play.golang.org/p/25swYz6BEtu

这里我们有许多if语句,对吗?

这些语句是否都与 2 == 2 相关?如果是,如何体现这一点?

17 回复
true

更多关于Golang中https://play.golang.org/p/25swYz6BEtu这段代码让我很困惑的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


有趣。谢谢

顺便说一下,我最后的回复是给jayts的

感谢两位。顺便说一句,两个回答都很有帮助。

我不太理解"如果为真……"这个表述。它指的是什么?

那么"if true"不是在判断 2 == 2 吗?如果不是,那它指的是什么?如果为真,是什么为真?

if true {…} 应该如何能够评估 2 == 2?我在其中看不到 2 == 2

2 == 2 是在 if 2 == 2 {…} 中被评估的。

完美的回答!这正是我问题的答案。

但是请稍等。

例如,第一个语句,如果为真… 这到底是指 2==2 吗?

其他语句也是如此吗?

还是所有语句都是完全独立的?

当Lazer喜欢Curtis的回答时,这激励我再次研究它,现在我对它有了更好的理解。我认为所有答案结合起来对我帮助很大。谢谢大家。 图片

我是在开玩笑说Go语言的错误信息,因为Go的错误信息是我见过的所有编程语言中最奇怪的!我喜欢拿它们开玩笑。所以如果你觉得它们很神秘,也不用担心。

你确实能得到错误的行号,然后希望错误信息中的其他词语能以某种方式与你做错的地方关联起来。编写一个能给出真正清晰有用错误信息的编译器并不容易!

cherilexvold1974:

例如,第一个语句,如果为真…… 这到底是指 2==2 吗?

2==2 为真。但这些语句之间没有任何引用关系。它们是完全独立的。你可以删除其中任意一个语句,剩下的语句仍会保持原有的功能。

func main() {
    fmt.Println("hello world")
}

我开始阅读您提到的维基百科文章,这有助于我了解大致方向。

您关于"瑜伽课"(IF 表达式 THEN 语句)的信息 既有趣又令人愉悦,而且很有帮助。

目前,Go语言的错误信息有点令人困惑,但我确实能理解其中一部分。

是的!这很有帮助。我再次保证我会掌握的 💐

cherilexvold1974:

这里我们有一些if语句,对吗?

是的。有5个,但我不认为计数是你的问题

cherilexvold1974:

所有这些语句都与2 == 2有关吗?

你这是什么意思?你有5个不同的语句,每个语句在其主体中打印一些不同的字符串,只有在条件评估为true时才会执行。

如果语句在表达式评估为真时执行

//true 评估为真
	if true {
		fmt.Println("001")
	}

//false 为假
	if false {
		fmt.Println("002")
	}

//非真为假
	if !true {
		fmt.Println("003")
	}

//非假为真
	if !false {
		fmt.Println("004")
	}

// 2 == 2 为真
	if 2 == 2 {
		fmt.Println("005")
	}

如果中间有else语句,就会与2 == 2产生关联。以下是示例代码,不过由于只有第一个条件为真,所以总是会打印001。

func main() {
	if true {
		fmt.Println("001")
	} else 
	
	if false {
		fmt.Println("002")
	} else 
	
	if !true {
		fmt.Println("003")
	} else 
	
	if !false {
		fmt.Println("004")
	} else 
	
	if 2 == 2 {
		fmt.Println("005")
	}
}

这段代码展示了Go语言中if语句的多种用法,特别是条件表达式的灵活性和作用域控制。让我逐段分析:

package main

import "fmt"

func main() {
    // 示例1:基本if语句
    if 2 == 2 {
        fmt.Println("2 == 2 is true")
    }

    // 示例2:带初始化语句的if
    if x := 2; x == 2 {
        fmt.Println("x == 2 is true")
    }
    // x在这里不可用,因为它的作用域仅限于上面的if块

    // 示例3:带else的if语句
    if 2 == 3 {
        fmt.Println("This won't print")
    } else {
        fmt.Println("2 == 3 is false")
    }

    // 示例4:多个条件
    if 2 == 2 && 3 == 3 {
        fmt.Println("Both conditions are true")
    }

    // 示例5:嵌套if语句
    if 2 == 2 {
        if 3 == 3 {
            fmt.Println("Nested conditions are true")
        }
    }

    // 示例6:使用函数调用作为条件
    if isEqual(2, 2) {
        fmt.Println("Function returned true")
    }
}

func isEqual(a, b int) bool {
    return a == b
}

关于你的问题:

  1. 这些语句是否都与 2 == 2 相关? 是的,所有条件都围绕2 == 2这个基本比较展开,展示了不同的语法变体。

  2. 如何体现这一点?

    • 直接比较:if 2 == 2
    • 变量比较:if x := 2; x == 2
    • 逻辑组合:if 2 == 2 && 3 == 3
    • 函数封装:if isEqual(2, 2)
    • 嵌套验证:在2 == 2成立的前提下再检查其他条件

关键特性演示:

  • 初始化语句:if x := 2; x == 2中的x只在if块内有效
  • 作用域控制:if语句中声明的变量不会污染外部作用域
  • 条件灵活性:可以使用函数调用、方法调用等任何返回bool值的表达式

运行这段代码会输出所有true分支的内容,因为2 == 2始终为真。

回到顶部