猿问

申报后无法进口

我试图在 Go 中的声明之后导入一些模块。


例如,我尝试在声明变量后导入时间,但这不起作用,有人可以告诉我为什么在 Go 中会发生这种情况吗?


这有效:


package main


import (

       "fmt"

)

import "time";


var test = "testing"


func main() {

    currtime := time.Now()


    fmt.Println(test) 

    fmt.Println(currtime)//Output: 16:44:53

}


但事实并非如此:


package main


import (

       "fmt"

)


var test = "testing"

import "time"


func main() {

    currtime := time.Now()


    fmt.Println(test) 

    fmt.Println(currtime)//Output: 16:44:53


}

错误是“函数体之外的非声明语句”。为什么在 Go 中会发生这种情况?


慕妹3146593
浏览 110回答 3
3回答

MMTTMM

错误是“函数体之外的非声明语句”。为什么在 Go 中会发生这种情况?因为这就是 Go 定义的工作方式。从规格:每个源文件都包含一个 package 子句,定义它所属的包,然后是一组可能为空的导入声明,这些声明声明它希望使用其内容的包,然后是一组可能为空的函数、类型、变量声明,和常量。这意味着import 语句的唯一有效位置是package子句与函数、类型、变量和常量的声明之间。在你的例子中,你有一个变量声明,所以 Go 编译器知道不会再有 import 语句。然后它看到你的错误导入语句,看到它是一个非声明,并正确地生成你观察到的错误。

慕神8447489

为什么在 go lang 中会发生这种情况?因为语言规范不允许。很简单,或者?

海绵宝宝撒

在 Go 中通常有两种导入包的方法:import "fmt"import "time" 或者import (    "fmt"    "time")诀窍是你不能import在你的第二个例子中混合使用和其他东西。package mainimport (       "fmt")var test = "testing" //<-- This does not comply with the definition of a Go fileimport "time"func main() {    currtime := time.Now()    fmt.Println(test)     fmt.Println(currtime)//Output: 16:44:53}在这里,您可以找到一份完备的.go 文件剖析文档。每个 .go 文件的结构都是相同的。首先是 package 子句,前面可以有可选的注释,通常描述包的目的。然后是零个或多个进口申报。第三部分包含零个或多个顶级声明
随时随地看视频慕课网APP

相关分类

Go
我要回答