Ошибка при импорте пользовательских пакетов в Go Lang
Я создал библиотеку по имени libfastget
, которая находится в src
с моей программой как
src
|-libfastget
| |-libfastget.go
|
|-MainProgram
|-main.go
а libfastget
экспортирует funtion 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.
Ответы
Ответ 1
вам нужно будет сделать вашу функцию экспортируемой с заглавной буквой для ее имени:
func Fastget(...
Используется как:
n:=libfastget.Fastget(url,4,filename)
В спецификации указано: " Экспортированные идентификаторы":
Идентификатор может быть экспортирован для разрешения доступа к нему из другого пакета. Идентификатор экспортируется, если оба:
- первый символ имени идентификатора - это буква верхнего регистра Юникода (класс Unicode "
Lu
" ); и
- идентификатор объявляется в блоке или это поле имя или имя метода.
Все остальные идентификаторы не экспортируются.
Ответ 2
Недавно я начал изучать GO Lang (2 дня назад). Я обнаружил, что вам нужно настроить папку рабочей области, чтобы локальные пакеты импортировались в другие проекты или файлы main.go. Я использую VS Code Editor. Пожалуйста, поправьте меня, если я ошибаюсь, но эта установка работает нормально для меня.
Внутри вашего файла bash_profile
ИЛИ .zshrc
добавьте строки ниже, обновите GOPATH согласно пути к вашей папке.
export GOPATH=~/projects/GO_PROJECTS
export PATH=$PATH:$GOPATH/bin:$PATH
![enter image description here]()
и это мой файл sayHello.go
, обратите внимание, чтобы иметь возможность экспортировать функцию, имя func
должно начинаться с CapitalCase SayHello
package utils
import "fmt"
func SayHello() {
fmt.Println("Hello, Ajinkya")
}
и теперь я могу импортировать пакет утилит в файл main.go
package main
import (
"go_proj1/utils"
)
func main() {
utils.SayHello()
}
Ответ 3
Я нашел эту библиотеку очень полезной для импорта неэкспортированных функций в Go. Пожалуйста, внимательно прочитайте README перед использованием. https://github.com/alangpierce/go-forceexport
Ответ 4
- установить текущий каталог как GOPATH
- или вы можете использовать локальный импорт следующим образом
переместите свой main.go в каталог../на libfastget.go.
Я имею в виду, что файлы выглядят так:
ЦСИ
| -libfastget
| | -libfastget.go
|
| -main.go
import "./libfastget"