Перейти пакет не экспортирует функцию с заглавной буквы - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь импортировать пакет в 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)
}

Когда я запускаю main.go с go run main.go, я получаю сообщение об ошибке

undefined: image.New

Я гарантировал, что моя функция определена заглавной буквой, поэтому я не уверен, почему я могу вызывать функцию New. Однако я могу объявить новое изображение. Переменная изображения.

Edit:

Проблема заключалась в том, что я развивался вне назначенной GOPATH / src. Я создавал файл вне GOPATH и сбрасывал GOPATH в свой рабочий файл. Это помешало мне правильно импортировать и компилировать мои пакеты.

1 Ответ

0 голосов
/ 06 мая 2018

Собственная библиотека Перейти пакет "image" не имеет никакого нового метода.

Вам понадобится добавить префикс к вашему собственному пакету изображений с именем вашего проекта / пути в $GOPATH, чтобы Go выбрал ваш собственный пакет, а не собственный.

См. " Имена пакетов "

Пакет Go содержит как имя, так и путь.

Имя пакета указывается в выражении пакета его исходных файлов; Код клиента использует его в качестве префикса для экспортируемых имен пакета. Код клиента использует путь к пакету при импорте пакета.
По соглашению последний элемент пути к пакету - это имя пакета:

import (
    "context"                // package context
    "fmt"                    // package fmt
    "golang.org/x/time/rate" // package rate
    "os/exec"                // package exec
)

ОП добавляет:

image находится в папке src: у меня есть папка с именем image.

См. " Организация кода Go ":

Иногда люди устанавливают GOPATH в корень своего исходного репозитория и помещают свои пакеты в каталоги относительно корня репозитория, такие как * src/my/package.

С одной стороны, это делает короткие пути импорта короткими ("my/package" вместо "github.com/me/project/my/package"), но с другой стороны, это ломает иди и заставляет пользователей переустанавливать свои GOPATH для использования пакет.
Не делай этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...