Go语言导入自定义包后无法引用首字母大写函数求助
Go自定义包无法引用函数的解决方案
看起来你遇到了几个常见的Go包导入问题,我帮你一步步排查解决:
1. 修正拼写错误
你两个文件里的pacakage都写错了!这是最基础的语法错误,会导致Go编译器无法正确识别你的包结构,自然找不到New函数。把两个文件开头的pacakage改成package即可。
2. 解决包名冲突与模块路径问题
你在main.go里导入的"image"是Go标准库的image包,不是你自己写的自定义包!这是核心问题之一——Go会优先识别标准库的包,所以根本不会去加载你自己的image包,自然找不到New函数。
解决这个问题需要用Go模块来管理你的项目:
- 首先在项目根目录执行命令(把
your-module-name换成你自己的项目名,比如myimageapp):
执行后会生成一个go mod init your-module-namego.mod文件,用来管理你的模块依赖。 - 假设你的项目结构是这样的:
myimageapp/ go.mod main.go image/ image.go pixel/ pixel.go - 修改
main.go里的导入路径,指向你自己模块下的image包:package main import ( "fmt" "myimageapp/image" // 这里替换成你刚才init的模块名加包路径 ) func main(){ img := image.New(10,4) fmt.Println(img) } - 同时,你的
image.go里如果导入的pixel也是自定义包,也要改成对应的模块路径,比如"myimageapp/image/pixel"或者"myimageapp/pixel",具体取决于pixel包的位置。
3. 确认导出规则(你已经做对了,再强调下)
Go里只有首字母大写的函数、类型才能被其他包访问,你写的New函数首字母大写,Image结构体也是首字母大写,这部分是正确的,没问题。
最后运行测试
回到项目根目录,执行go run main.go,应该就能正常调用自定义包的New函数了!
内容的提问来源于stack exchange,提问作者leme
相关产品推荐
相关产品推荐

