Go 语法错误:名称意外,应为分号或换行符

Go 语法错误:名称意外,应为分号或换行符,go,Go,我不明白为什么我的代码有语法错误 package main import ( "fmt" "os/exec" "time" ) func ping(curl_out string) endtime int64 { try_curl := exec.Command("curl", "localhost:8500/v1/catalog/nodes") try_curl_out := try_curl.Output() for try_curl_ou

我不明白为什么我的代码有语法错误

package main

import (
    "fmt"
    "os/exec"
    "time"
)

func ping(curl_out string) endtime int64 {
    try_curl := exec.Command("curl", "localhost:8500/v1/catalog/nodes")
    try_curl_out := try_curl.Output()
    for try_curl_out == curl_out {
        try_curl := exec.Command("curl", "localhost:8500/v1/catalog/nodes")
        try_curl_out := try_curl.Output()
    }
    endtime := time.Now().Unix()
    return endtime
}

func main() {
    run_container := exec.Command("docker", "run", "-p", "8400:8400", "-p", "8500:8500", "-p", "8600:53/udp", "-h", "node1", "progrium/consul", "-server", "-bootstrap")
    container_id, err := run_container.Output()
    if err != nil {
        fmt.Println(err)
        return
    }
    run_curl := exec.Command("curl", "localhost:8500/v1/catalog/nodes")
    curl_out, err := run_curl.Output()
    if err != nil {
        fmt.Println(err)
        return
    }
    endtime := go ping(string(curl_out))
    container_id, err = exec.Command("docker", "stop", container_id)
    if err != nil {
        fmt.Println(err)
        return
    }
    startime := time.Now().Unix()
    fmt.Println("delay is", endtime-startime)
}

# command-line-arguments
./main.go:9: syntax error: unexpected name, expecting semicolon or newline
./main.go:11: non-declaration statement outside function body
./main.go:15: non-declaration statement outside function body
./main.go:16: non-declaration statement outside function body
./main.go:17: non-declaration statement outside function body
./main.go:18: syntax error: unexpected }
此代码计算docker启动和停止之间的时间。 我使用例程返回结束时间

endtime := go ping(string(curl_out))
我认为这是错误的。如何使用关键字go


在Go中,我是否在函数体之外减速语句?

有两个主要问题(以及许多不相关的问题)

首先,需要将命名的返回参数括起来

func ping(curl_out string) (endtime int64) {
其次,您不能分配goroutine的返回值。它在一个全新的上下文中异步执行。使用通道在goroutine之间进行通信

您可以声明ping函数,如下所示:

func ping(curl_out string, endtime chan<- int64) {
func-ping(卷出字符串,结束时间chan在第9行:

加括号

func ping(curl_out string) (endtime int64) {
或删除返回值名称:

func ping(curl_out string) int64 {
使用
go
关键字创建goroutine是正确的,您不能将其分配给返回值,只需删除
go
关键字并直接分配值

另外(样式)go变量也在camelCase中,因此您应该将变量从
run\u container
更改为
runContainer
或更好的
container
,甚至更好的是
c
,这同样适用于
run\u curl
,可能是
curl

这里是您的代码的一个稍微增强的版本(不知道它是做什么的)


我想计算时间。startItem=服务在Consult中停止endtime=此服务不解析。“函数体外的减速语句”?
func ping(curl_out string) int64 {