导入的包里不能带有 main 函数,否则会报下面的错误

[Go] Import “abcd/xyz” is a program, not an importable package.
hello
│   ├── main.go
│   ├── mylib
│   │   └── mylib.go
│   └── others
│       ├── Add.go
│       ├── ConvertString.go
│       ├── hello.go
│       ├── import.go
│       ├── Simpleweb.go
│       ├── struct.go
│       └── TimeConvert.go

代码

package mylib
func Add(a, b int) int {
    return a + b
}
package main

import (
    "hello/mylib"
    "fmt"
)

func main() {
    fmt.Println(mylib.Add(1, 2))
}

go mod

使用go mod 管理各种依赖,当导入自己定义的包的时候,需要从go.mod文件作为绝对路径import。并且路径开头应该是module名,不是目录名
举例:

$ tree SimpleBlog 
SimpleBlog
├── go.mod
├── main
├── main.go
├── README.md
└── routers
    └── Index.go

1 directory, 5 files

这是我当前的目录结构,可以看到,在 SimpleBlog 目录下面是go.mod文件,在 routers 目录下有一个 Index.go 文件。
使用 go mod 初始化一下

$ go mod init blog
go: creating new go.mod: module blog

我现在的 module 名是 blog, 而目录名是 SimpleBlog,在 main.go 里,我需要引入 routers 目录下自定义的包,此时在 main.go 里,需要import "blog/routers",而不是import "SimpleBlog/routers"