Я пытаюсь написать базовую программу 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!"
}
package x
, также ваш основной пакет обычно содержит только один файл, а затем импортирует другие части, которые ему нужны,go run
? (и см. golang.org/doc/code.html )main.go
иemployee.go
? Потому что все файлы go должны иметь оператор пакета, а я его не вижу в вашем. См .: golang.org/doc/code.html#PackageNamesgo
инструмент.Ответы:
Прочтите, пожалуйста, «Как написать код Go» .
Не используйте
/src
в своемGOPATH
. Пакеты расположены в$GOPATH/src
.Для
build
илиinstall
вам нужно, чтобы ваши файлы были в каталоге пакета.В
go run
качестве аргумента необходимо указать все файлы:Но вы почти всегда должны использовать
go install
илиgo build
(и предпочтительно первое, посколькуgo build
вызывает путаницу при работе с неосновными пакетами)источник
$ go run *.go
было бы сокращением вместо запуска всех файловУ меня была такая же проблема в GoLand (это Intellij IDEA для Go), и я нашел решение. Вам нужно изменить
Run kind
сFile
наPackage
илиDirectory
. Вы можете выбрать это из раскрывающегося списка, если войдете вRun/Edit
Конфигурации.Например: для пакета
~/go/src/a_package
используйте aPackage path
ofa_package
и aDirectory
of~/go/src/a_package
иRun kind
ofPackage
orDirectory
.источник
Если вы используете
go run
, сделайтеgo run *.go
. Он автоматически найдет все файлы go в текущем рабочем каталоге, скомпилирует и затем запустит вашу основную функцию.источник
go run !(*_test).go
- Golang: запускать все файлы .go в текущем каталоге через командную строку (многофайловый пакет)Вы можете попробовать один из следующих:
Способ 1 :
MyProject
go build
./MyProject
Вы можете выполнить оба шага одновременно, набрав
go build && ./MyProject
. Файлы Gopackage main
компилируются в исполняемый файл.Способ 2 :
go run *.go
. Он не создает никаких исполняемых файлов, но работает.источник
Если вы хотите вызвать функцию из другого файла go и используете Goland, найдите опцию «Изменить конфигурацию» в меню «Выполнить» и измените тип выполнения с «Файл» на «Каталог». Он очищает все ошибки и позволяет вызывать функции из других файлов go.
источник
Я столкнулся с той же проблемой
Go11
, просто хотел поделиться, как я решил ее, помогая другим на случай, если они столкнутся с той же проблемой.У меня был проект Go снаружи
$GOPATH
, поэтому мне пришлось включитьGO111MODULE=on
эту опцию без включения этой опции, это даст вам эту проблему; даже если вы попытаетесь собрать или протестировать все,package
иначеdirectory
это не будет решено безGO111MODULE=on
источник
вам следует использовать модули go сейчас, если вы не следуете Как писать код go
С модулем go вам не нужно помещать код в файл $ GOPATH / src. он может жить и в любом другом месте.
Вы можете переместить код в другой каталог, например / employee. Чтобы он работал, сразу в каталоге сотрудников инициализируйте модуль go.
источник
go run .
запустит все ваши файлы. Точка входа - это функция,main()
которая должна быть уникальной дляmain
пакета.Другой вариант - собрать двоичный файл
go build
и запустить его.источник
Просто используйте команду
go run *.go
для выполнения всех файлов go в вашем пакете!источник
Если ваша исходная папка имеет структуру / go / src / blog (предполагается, что исходная папка называется blog).
Это должно запускать все ваши файлы одновременно, вместо того, чтобы вам приходилось перечислять файлы вручную или «отбивать» метод в командной строке.
источник
go install
иgo build
разные? И исполняемый файл вызывается с использованием,./<executable>
а неblog
. Поскольку вы использовалиgo install
его в своемGOPATH/bin
(даже добавленном к вашему $ PATH), и поэтому он простоblog
работает для вас.