我正在尝试在Golang中导入一个包,但是我无法引用包中声明的函数。
以下代码适用于我尝试导入的软件包。
//image.go
pacakage image
import "pixel"
type Image struct {
Matrix [][]pixel.Pixel
}
func New(width, height int) *Image{
//Code
}
以下代码适用于主文件
//main.go
pacakage main
import (
"image"
"fmt"
)
func main(){
img := image.New(10,4)
fmt.Println(img)
}
当我使用go run main.go运行main.go时,我收到错误消息
undefined: image.New
我确保我的函数是用大写字母定义的,所以我不确定为什么我能够调用New函数。然而,我能够声明一个新的image.Image变量。
编辑:
问题是我在指定的GOPATH / src之外进行开发。我在GOPATH之外创建了一个文件,并将我的GOPATH重置为我的工作文件。这使我无法正确导入和编译我的包。
答案 0 :(得分:3)
本机库Go "image" package没有任何新方法。
您需要在$GOPATH
中为自己的图片包添加项目/路径名称的前缀,以便让Go选择您自己的包,而不是原生包。
请参阅" Package names"
Go包有名称和路径。
包名称在其源文件的package语句中指定;客户端代码将其用作包的导出名称的前缀。导入包时,客户端代码使用包路径 按照惯例,包路径的最后一个元素是包名:
import (
"context" // package context
"fmt" // package fmt
"golang.org/x/time/rate" // package rate
"os/exec" // package exec
)
OP补充道:
image
位于src
文件夹中:我有一个名为image
的文件夹。
请参阅" Organizing Go code":
有时人们将
GOPATH
设置为其源存储库的根目录,并将其包放在相对于存储库根目录的目录中,例如"src/my/package
"。一方面,这会使导入路径变短("
my/package
"而不是"github.com/me/project/my/package
"),但另一方面它会中断go get并强制用户重新设置他们的GOPATH
以使用该包 不要这样做。