Golang程序与可导入包的区别解析

Golang程序与可导入包的区别解析 早上好,我是Go语言的新手。当我尝试运行 go run . 时,遇到了“是一个程序,不是一个可导入的包”的错误。有人知道如何解决这个问题吗? 我已经在VSC中安装了Go。 我已经在main.go的import前加上了“_”和“.”。

1

2


更多关于Golang程序与可导入包的区别解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你的模块与课程创建者的模块名称完全相同,因此你的导入操作试图导入自身,而不是 GitHub 仓库中提供的包。

另外,请复制并粘贴代码和错误信息,而不是使用截图。从截图中复制粘贴非常困难,而且很多人甚至根本不会看截图。

更多关于Golang程序与可导入包的区别解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个典型的Go模块结构问题。错误信息表明你试图导入一个包含 main 包的目录,而Go不允许导入 main 包。

问题分析

从图片看,你的项目结构是:

your-project/
├── main.go
└── utils/
    └── utils.go

utils.go 中可能包含 package main,但 main.go 试图导入它。

解决方案

1. 修改 utils/utils.go 的包声明

utils.go 中的 package main 改为 package utils

// utils/utils.go
package utils

import "fmt"

func Hello() {
    fmt.Println("Hello from utils")
}

2. 正确导入 utils

main.go 中导入:

// main.go
package main

import (
    "fmt"
    "your-module-name/utils" // 替换为你的模块名
)

func main() {
    fmt.Println("Main function")
    utils.Hello()
}

3. 确保有正确的 go.mod 文件

在项目根目录运行:

go mod init your-module-name

这会创建 go.mod 文件,其中 your-module-name 应该是你的模块名称(如 github.com/yourname/yourproject)。

4. 完整的项目结构示例

your-project/
├── go.mod          # module your-module-name
├── main.go         # package main
└── utils/
    └── utils.go    # package utils

5. 运行程序

go run .

关键点

  • main 包是程序的入口点,不能被其他包导入
  • 可导入的包必须有非 main 的包名(如 package utils
  • 导入路径基于 go.mod 中的模块名 + 子目录路径

如果 utils.go 需要保持为 main 包,那么它应该放在项目根目录,与 main.go 在同一个包中,通过文件组织而不是导入来共享代码。

回到顶部