我创建了一个名为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文件夹中。
答案 0 :(得分:83)
您需要使用大写字母输出您的函数名称:
func Fastget(...
用作:
n:=libfastget.Fastget(url,4,filename)
规范提到:" Exported identifiers":
可以导出标识符以允许从另一个包访问它。如果两者都导出标识符:
Lu
");和不会导出所有其他标识符。
答案 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
这是我的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)
将main.go移动到../目录到libfastget.go 我的意思是文件看起来像:
SRC
| -libfastget
| | -libfastget.go
|
| -main.go