包裹不用大写字母输出功能

时间:2018-05-06 00:18:48

标签: go import package

我正在尝试在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重置为我的工作文件。这使我无法正确导入和编译我的包。

1 个答案:

答案 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以使用该包   不要这样做。