Estou tentando escrever um programa básico que chama uma função em um arquivo diferente, mas faz parte do mesmo pacote. No entanto, ele retorna:
undefined: NewEmployee
Aqui está o código fonte:
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
, também o seu pacote principal normalmente contém apenas um único arquivo e importa as outras peças necessáriasgo run
? (e consulte golang.org/doc/code.html )main.go
eemployee.go
? Porque todos os arquivos go devem ter uma declaração de pacote e não vejo nenhum na sua. Veja: golang.org/doc/code.html#PackageNamesgo
ferramenta.Respostas:
Por favor, leia "Como escrever o código Go" .
Não use
/src
no seuGOPATH
. Pacotes estão localizados em$GOPATH/src
.Para
build
ouinstall
você precisa ter seus arquivos em um diretório de pacotes.Para
go run
, você precisa fornecer todos os arquivos como argumento:Mas você quase sempre deve usar
go install
, ougo build
(e de preferência o primeiro, comogo build
causa confusão ao trabalhar com pacotes não principais)fonte
$ go run *.go
seria um atalho em vez de executar todos os arquivosAcabei de ter o mesmo problema no GoLand (que é o Intellij IDEA for Go) e resolvi uma solução. Você precisa alterar o
Run kind
deFile
paraPackage
ouDirectory
. Você pode escolher isso em um menu suspenso se entrar emRun/Edit
Configurações.Por exemplo: no pacote
~/go/src/a_package
, use aPackage path
dea_package
e aDirectory
de~/go/src/a_package
eRun kind
dePackage
ouDirectory
.fonte
Se você estiver usando
go run
, façago run *.go
. Ele encontrará automaticamente todos os arquivos go no diretório de trabalho atual, compilará e executará sua função principal.fonte
go run !(*_test).go
- golang: executar todos os arquivos .Vá dentro do diretório corrente através da linha de comando (pacote de arquivos de multi)Você pode tentar um dos seguintes.
Método 01 : suponha que o nome do seu projeto seja
MyProject
go build
e pressione enter../MyProject
e pressione entervocê pode executar as duas etapas ao mesmo tempo digitando
go build && ./MyProject
. ele executará seu projeto corretamente com todosgo
arquivos.Método 02
basta digitar
go run *.go
e pressionar enter. isso executará todo o seugo files
.Espero que isso ajude alguém.
fonte
Se você quiser chamar uma função de outro arquivo go e estiver usando o Goland, encontre a opção 'Editar configuração' no menu Executar e altere o tipo de execução de Arquivo para Diretório. Ele limpa todos os erros e permite chamar funções de outros arquivos go.
fonte
Corri para o mesmo problema com
Go11
, só queria compartilhar como o resolvi para ajudar outras pessoas, caso elas encontrem o mesmo problema.Eu tinha o meu projeto Go fora
$GOPATH
, então tive que ativarGO111MODULE=on
sem essa opção ativada, ele vai te dar esse problema; mesmo se você tentar construir ou testar o todopackage
oudirectory
ele não será resolvido semGO111MODULE=on
fonte
você deve usar os módulos go agora, se não estiver seguindo Como escrever código go
Com o módulo go, você não precisa colocar o código no $ GOPATH / src. também pode morar em qualquer outro local.
Você pode mover o código para um diretório diferente, como / employee, Para fazê-lo funcionar. Apenas no diretório employee, inicialize o módulo go
fonte
Se sua pasta de origem estiver estruturada / go / src / blog (assumindo que o nome da pasta de origem seja blog).
Isso deve executar todos os seus arquivos ao mesmo tempo, em vez de você precisar listar os arquivos manualmente ou "bashing" um método na linha de comando.
fonte
go run .
irá executar todos os seus arquivos. O ponto de entrada é a funçãomain()
que deve ser exclusiva para omain
pacote.Outra opção é construir o binário
go build
e executá-lo.fonte
Basta usar o comando
go run *.go
para executar todos os arquivos go no seu pacote!fonte