Ошибка при импорте пользовательских пакетов в 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"