Golang "undefined" функция объявлена в другом файле?
Я пытаюсь написать базовую программу go, которая вызывает функцию из другого файла, но является частью того же пакета. Тем не менее, он возвращает:
undefined: NewEmployee
Вот исходный код:
main.go
:
package main
func main() {
emp := NewEmployee()
}
employee.go
:
package main
type Employee struct {
name string
age int
}
func NewEmployee() *Employee {
p := &Employee{}
return p
}
func PrintEmployee (p *Employee) {
return "Hello world!"
}
Ответы
Ответ 1
Пожалуйста, прочитайте "Как написать код перехода" .
Не используйте /src
в GOPATH
. Пакеты расположены в $GOPATH/src
.
Для build
или install
вам нужно иметь свои файлы в каталоге пакета.
Для go run
вам необходимо указать все файлы в качестве аргумента:
go run main.go employee.go
Но вы должны почти всегда использовать go install
, или go build
(и предпочтительно первый, поскольку go build
вызывает путаницу при работе с неосновными пакетами)
Ответ 2
У меня была такая же проблема в GoLand (это Intellij IDEA for Go), и я нашел решение. Вам нужно изменить Run kind
с File
на Package
или Directory
. Вы можете выбрать это из выпадающего меню, если зайдете в Run/Edit
Конфигурации.
Для пакета ~/go/src/a_package
используйте Package path
из a_package
и Directory
из ~/go/src/a_package
и Run kind
из Package
или Directory
.
Ответ 3
Если вы используете go run
, go run *.go
. go run *.go
. Он автоматически найдет все файлы go в текущем рабочем каталоге, скомпилирует и затем запустит вашу основную функцию.
Ответ 4
Вы можете попробовать одно из следующих действий.
Метод 01: предположим, что ваше имя проекта MyProject
- перейдите к вам путь, введите
go build
и нажмите enter. - он создаст исполняемый файл в качестве имени вашего проекта ("MyProject")
- затем введите тип терминала
./MyProject
и нажмите Enter.
вы можете сделать оба действия сразу, набрав go build &&./MyProject
. он будет правильно запускать ваш проект со всеми файлами go
.
Способ 02
просто type go run *.go
и хит ввод. это выполнит все ваши go files
.
Надеюсь, это поможет кому-то.
Ответ 5
Если вы хотите вызвать функцию из другого файла go и используете Goland, найдите опцию "Редактировать конфигурацию" в меню "Выполнить" и измените вид запуска из "Файл в каталог". Он очищает все ошибки и позволяет вам вызывать функции из других файлов go.
Ответ 6
Если ваша исходная папка структурирована /go/src/blog (предполагается, что имя вашей исходной папки - это блог).
- cd/go/src/blog... (cd внутри папки с вашим пакетом)
- go install
- Блог
Это должно одновременно запускать все ваши файлы, вместо того, чтобы вам вручную указывать файлы или "избивать" метод в командной строке.
Ответ 7
Я столкнулся с той же проблемой с Go11
, просто хотел поделиться тем, как я решил ее, чтобы помочь другим на тот случай, если они столкнутся с той же проблемой.
У меня был проект Go за пределами $GOPATH
, поэтому мне пришлось включить GO111MODULE=on
если эта опция не GO111MODULE=on
, это даст вам эту проблему; даже если вы попытаетесь собрать или протестировать весь package
или directory
это не будет решено без GO111MODULE=on