我正在学习Go,但我不明白如何从函数的内部块返回数据。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
if isTrue("asasa") {
fmt.Println("isTrue is true")
}
}
func isTrue(s string) bool {
if s == "asasa" {
fmt.Println("it matches")
return true
}
}
https://play.golang.org/p/x6l29CNdg-o
如何返回嵌套(甚至多次嵌套)块中满足的条件?
func isUnique(h, c, L float64) bool {
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
} else {
return true
}
}
}
我收到值h, c, L
的三元组,我想检查它是否与之前存储其他三元组的2D切片相对唯一。
我循环遍历所有三元组,如果存在匹配项,我希望isUnique
返回false,否则返回true。
答案 0 :(得分:1)
修复您的编译错误:: missing return at end of function
。例如,
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
if isTrue("asasa") {
fmt.Println("isTrue is true")
}
}
func isTrue(s string) bool {
if s == "asasa" {
fmt.Println("it matches")
return true
}
return false
}
游乐场:https://play.golang.org/p/AYj7tcXd49k
输出:
Hello, playground
it matches
isTrue is true
The Go Programming Language Specification
函数F中的“返回”语句终止F的执行。
对于您刚刚添加的实际情况:
func isUnique(h, c, L float64) bool {
for i, color := range usedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
return true
}
答案 1 :(得分:0)
检查从函数返回的值,将其分配给变量,并在检查以下条件时在main中使用它: 包主
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
if ok := isTrue("asasa"); ok {
fmt.Println("isTrue is true")
}
}
func isTrue(s string) bool {
boolean := false
for i := 0; i < 5; i++ {
if s == "asasa" {
fmt.Println("it matches")
boolean = true
}
}
return boolean
}
在If control statement的Golang有效Go中,描述如下:
由于and开关接受初始化语句,因此通常 请参阅用于设置局部变量的一个。
if err := file.Chmod(0664); err != nil {
log.Print(err)
return err
}
在Go库中,当if语句不存在时,您会发现 流入下一条语句-也就是说,主体以断裂结束, 继续,转到或返回-省略不必要的其他内容。
f, err := os.Open(name)
if err != nil {
return err
}
codeUsing(f)
它还用于地图中,以根据键检查值是否存在。在地图上查看Effective Go的此链接以了解有关comma ok
语法的更多信息。
工作代码已于Go playground
更新答案 2 :(得分:0)
如果我正确理解了您的问题,这是一个一般的逻辑问题,而不是golang问题或从块返回。您的代码有问题:
func isUnique(h, c, L float64) bool {
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
} else {
return true
}
}
}
是仅检查第一种颜色,而不是全部检查。您真的想要的是首先检查它们是否匹配
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
并且仅当都不匹配时,返回true。
func isUnique(h, c, L float64) bool {
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
return true
}