Подтвердить что ты не робот

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!"
}
4b9b3361

Ответ 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