Go"魔丸"包命名法

在写 Go 时,如果项目中有一些子包,通常会保持目录名和文件头部的 package 名一致。但我突发奇想,如果两者不一样呢?遂做如下实验:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ tree
.
├── go.mod
├── main.go
└── myfolder
└── myfile.go

$ cat go.mod
module example.com/demo

go 1.26.4

$ cat main.go
package main

import "example.com/demo/myfolder"

func main() {
mypackage.Greet()
}

$ cat myfolder/myfile.go
package mypackage

import "fmt"

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

这里的目录名、文件名、package 名均不一致。首先,文件名不参与导入过程,可以排除。然后可以看到,import 语句中需要用目录名,而后续使用包的时候,需要使用 package 名。


Go"魔丸"包命名法
https://tomzhu.site/2026/07/12/Go-魔丸-包命名法/
作者
Tom Zhu
发布于
2026年7月12日
许可协议