为了账号安全,请及时绑定邮箱和手机立即绑定

申报后无法进口

申报后无法进口

Go
慕妹3146593 2023-05-08 15:58:13
我试图在 Go 中的声明之后导入一些模块。例如,我尝试在声明变量后导入时间,但这不起作用,有人可以告诉我为什么在 Go 中会发生这种情况吗?这有效:package mainimport (       "fmt")import "time";var test = "testing"func main() {    currtime := time.Now()    fmt.Println(test)     fmt.Println(currtime)//Output: 16:44:53}但事实并非如此:package mainimport (       "fmt")var test = "testing"import "time"func main() {    currtime := time.Now()    fmt.Println(test)     fmt.Println(currtime)//Output: 16:44:53}错误是“函数体之外的非声明语句”。为什么在 Go 中会发生这种情况?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

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

因为这就是 Go 定义的工作方式。从规格:

每个源文件都包含一个 package 子句,定义它所属的包,然后是一组可能为空的导入声明,这些声明声明它希望使用其内容的包,然后是一组可能为空的函数、类型、变量声明,和常量。

这意味着import 语句的唯一有效位置是package子句与函数、类型、变量和常量的声明之间。

在你的例子中,你有一个变量声明,所以 Go 编译器知道不会再有 import 语句。然后它看到你的错误导入语句,看到它是一个非声明,并正确地生成你观察到的错误。


查看完整回答
反对 回复 2023-05-08
?
慕神8447489

TA贡献1780条经验 获得超1个赞

为什么在 go lang 中会发生这种情况?

因为语言规范不允许。很简单,或者?


查看完整回答
反对 回复 2023-05-08
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

在 Go 中通常有两种导入包的方法:


import "fmt"

import "time" 

或者


import (

    "fmt"

    "time"

)

诀窍是你不能import在你的第二个例子中混合使用和其他东西。


package main


import (

       "fmt"

)


var test = "testing" //<-- This does not comply with the definition of a Go file

import "time"


func main() {

    currtime := time.Now()


    fmt.Println(test) 

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


}

在这里,您可以找到一份完备的.go 文件剖析文档。

每个 .go 文件的结构都是相同的。

  • 首先是 package 子句,前面可以有可选的注释,通常描述包的目的。

  • 然后是零个或多个进口申报。

  • 第三部分包含零个或多个顶级声明


查看完整回答
反对 回复 2023-05-08
  • 3 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信