简单的 hello world 为什么会在 GoLang 的函数中分崩离析?

分享于2022年09月29日 concatenation go string 问答
【问题标题】:Simple hello world falls apart in a function with GoLang why?简单的 hello world 为什么会在 GoLang 的函数中分崩离析?
【发布时间】:2022-07-25 18:04:56
【问题描述】:

我学习 golang 已经有几个星期了,想测试一下我的知识。这个简单的 Hello World 程序在基本的 golang func main(){} 程序中运行。

package main

import "fmt"

func main() {
    h := "h"
    w := "e"
    combinedstring := h + "," + w
    fmt.Println(combinedstring)
}

然而,当我将该代码移动到一个函数中并告诉该函数在其参数中期望什么以及返回什么时,整个事情就崩溃了。

package main

import (
    "fmt"
)

func printHelloWorld(h string, w string) combinedstring string{
    h := "h"
    w := "e"
    combinedstring := h + "," + w
    return combinedstring
}

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

我得到的错误是: syntax error: unexpected string after top level declaration 即使在研究之后我也不知道这意味着什么。可能意味着什么......

  • 如果使用命名结果类型,必须将它们放在括号中: func printHelloWorld(h string, w string) (combinedstring string) {} 。不过既然不用,可以省略: func printHelloWorld(h string, w string) string {}
  • 如果您确实希望使用它,请使用赋值 = 而不是短变量声明 := 。如果您是新手,请拨打 Go tour
  • 非常感谢 :) 现在我明白了。因为我要命名返回值,所以我必须加上括号。我已经完成了 Go Tour,并且在 UDemy 上观看了 8 个小时的 ZTM 视频,只是在努力将其中的一些内容记录下来。为遇到此问题的任何人找到有关命名括号的链接: geeksforgeeks.org/named-return-parameters-in-golang

【解决方案1】:

所以这里发生了一些事情。

首先,当使用命名返回时,你需要将它包裹在圆括号中。

func myPrefixFunc(msg string) (namedReturn string) {
    namedReturn = fmt.Sprintf("PREFIX: %s", msg)
}

其次,在您的新函数中,您会立即尝试重新声明 h w 。它们已经在函数参数中声明了,如果你想给它们赋值(尽管这会使你的函数非常僵化)你应该使用 = 而不是 :=

【讨论】: