Golang中如何导入同一文件夹下的GO文件

Golang中如何导入同一文件夹下的GO文件 我在同一个目录下创建了3个文件,即 main.go、json.go 和 handler.go。 我无法在 main.go 中导入其他两个文件中的函数。据我所知,只要文件在同一目录下,我们就不需要导入文件。

Screenshot 2023-06-12 at 7.23.28 PM

3 回复

是的,这个方法有效。非常感谢。

更多关于Golang中如何导入同一文件夹下的GO文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我会从这里开始:

Go 图标

如何编写 Go 代码 - Go 编程语言

Gopher 标志

Go 程序被组织成包。一个包是同一目录下被一起编译的源文件的集合。在一个源文件中定义的函数、类型、变量和常量对同一包内的所有其他源文件都是可见的。

如果这些文件与 main.go 在同一文件夹中,它们应该属于同一个包(main),那么你就不应该使用 json.respondWithJSON,而应该直接使用 respondWithJSON(因为它们在同一包中)。如果你想创建一个不同的包,请将你的文件放在一个子文件夹中(例如 /json),但我也要提醒不要创建一个名为 json 的包,因为这会与标准库冲突。

在Go中,同一目录下的文件属于同一个包(package),不需要使用import语句来导入。根据你的描述,问题可能出在以下几个方面:

1. 包声明不一致

确保所有文件都声明为同一个包名:

// main.go
package main

// json.go
package main

// handler.go
package main

2. 函数名首字母大小写

Go中只有首字母大写的函数才能被同一包内的其他文件访问:

// json.go
package main

// 可被其他文件访问
func ProcessJSON() {
    // 函数实现
}

// 不可被其他文件访问(私有函数)
func processJSONInternal() {
    // 函数实现
}

3. 完整示例

// main.go
package main

import "fmt"

func main() {
    // 直接调用,无需导入
    result := ProcessJSON()
    fmt.Println(result)
    
    HandleRequest()
}
// json.go
package main

func ProcessJSON() string {
    return "JSON processed"
}
// handler.go
package main

import "fmt"

func HandleRequest() {
    fmt.Println("Request handled")
}

4. 编译和运行

在项目目录下直接运行:

go run .

或者指定所有文件:

go run main.go json.go handler.go

5. 常见错误排查

  • 检查所有文件是否在同一目录
  • 确认包名完全一致(包括大小写)
  • 确保调用的函数名首字母大写
  • 使用 go mod init <module-name> 初始化模块(如果尚未初始化)

如果问题仍然存在,请检查是否有编译错误信息,通常Go编译器会明确指出问题所在。

回到顶部