go语言怎么区分包、文件、文件夹?

go语言怎么区分包、文件、文件夹?
比如有这么个文件:
d:\workspace\www\go_work\src\project_01\hello.go

package main

import "fmt"

func main(){
  fmt.Println("hello")
}

看教程说程序必须有一个main包,问题:

上面这个示例,文件名是hello.go,里面package写的是main,但是并没有什么实际的main包存在,究竟是指什么?好像也不是一个文件或文件夹,因为也没有main这个文件或文件夹存在。

阅读 3.6k
2 个回答

就拿 gorilla/websocket 这个包做事例,
下载到本地 src 后引用他

import(
    "github.com/gorilla/websocket"
)

那么 gorilla/websocket就是一个包, 包名和目录路径其实是一致的, 因为 $GOPATH/src 底下都是可以算做包

main.go 这个文件和 package main对于一个包来说不是必须的, 通常都是用 *_test.go这类的测试文件来跑函数, main.go 就是一个启动文件, 在 php 里面的地位相当于index.php, 用它做入口,但是主体逻辑还是要放在各个包里

一个包就是由一个或多个源文件组成,各个源文件都可以访问包内的内容(包括 变量、常量、类型、函数等)。包在源文件层面的组织就是文件夹,通常把一个包的所有源文件放在一个文件夹中。

main 包比较特殊,因为它必须包含一个 main 函数;而且它必须位于程序的根目录。

所以:

你问包究竟是什么。包在程序层面就是所有使用相同 package <package-name> 的源文件组成的代码模块;在源文件层面就是一个文件夹。


go 的源代码组织跟其他语言可能有些差别。初学者的话如果不能一下理解,那就可以不用过多思考,等到深入学习之后,看过更多别人的代码,慢慢就会理解的。

此外,要多看官方文档,官方文档对源代码的组织也有很详细的说明

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题