在Go Lang中导入自定义包时出错

时间:2014-08-26 09:01:39

标签: go

我创建了一个名为libfastget的库,src中的程序为

src
|-libfastget
|  |-libfastget.go
|
|-MainProgram
   |-main.go

libfastget导出功能fastget,如下所示

package libfastget

import (
    "fmt"
    "io"

)


func fastget(urlPtr *string, nPtr *int, outFilePtr *string) download {
    .....
    return dl

}

当我在主程序中使用库时

package main

import (
    "fmt"
    "net/http"
    "os"
    "libfastget"
    "path/filepath"
    "strings"
    "flag"
    "time"

)
func uploadFunc(w http.ResponseWriter, r *http.Request) {

         n:=libfastget.fastget(url,4,filename)

    }

}

尝试使用go build

进行构建时出现以下错误
# FServe
./main.go:94: cannot refer to unexported name libfastget.fastget
./main.go:94: undefined: libfastget.fastget

奇怪的是库文件libfastget.a出现在pkg文件夹中。

4 个答案:

答案 0 :(得分:83)

您需要使用大写字母输出您的函数名称:

func Fastget(...

用作:

n:=libfastget.Fastget(url,4,filename)

规范提到:" Exported identifiers":

  

可以导出标识符以允许从另一个包访问它。如果两者都导出标识符:

  • 标识符名称的第一个字符是Unicode大写字母(Unicode类" Lu");和
  • 标识符在package block中声明,或者是field namemethod name
  

不会导出所有其他标识符。

答案 1 :(得分:0)

我最近开始学习GO Lang(2天前) 我发现您需要设置一个workspace文件夹,以将本地包导入到其他项目或main.go文件中。我正在使用VS Code编辑器。如果我错了,请纠正我,但是此设置对我来说很好。

bash_profile.zshrc文件的下面添加以下行,根据文件夹路径更新GOPATH。

export GOPATH=~/projects/GO_PROJECTS
export PATH=$PATH:$GOPATH/bin:$PATH

enter image description here

这是我的sayHello.go文件,请注意,能够导出功能的func名称应以大写字母 SayHello

开头
package utils

import "fmt"

func SayHello() {
    fmt.Println("Hello, Ajinkya")
}

现在我可以将utils包导入main.go文件

package main

import (
    "go_proj1/utils"
)

func main() {
    utils.SayHello()
}

答案 2 :(得分:0)

要将函数导出到另一个包中,函数标识符必须以大写字母开头。

答案 3 :(得分:-1)

  1. 将当前目录设置为GOPATH
  2. 或者您可以使用本地导入如下

      


      将main.go移动到../目录到libfastget.go   我的意思是文件看起来像:
      SRC
      | -libfastget
      | | -libfastget.go
      |
      | -main.go

  3.      导入“./libfastget"

相关问题