Quero chamar a função de outro arquivo em go lang. Alguém pode ajudar?
test1.go
package main
func main() {
demo()
}
test2.go
package main
import "fmt"
func main() {
}
func demo() {
fmt.Println("HI")
}
Como chamar demo
em test2
partir test1
?
go fmt
? Como no terminal ou o quê? Como isso mostra que ele se preocupa com alguma coisa?Respostas:
Você não pode ter mais de um
main
em seu pacote.Mais geralmente, você não pode ter mais de uma função com um determinado nome em um pacote.
Remova o
main
emtest2.go
e compile o aplicativo. Ademo
função ficará visível a partir detest1.go
.fonte
main
em test2.go, mas não conseguiu executar test1.go usandogo run test1.go
ainda. Por quê ?go run test1.go test2.go
Go Lang por padrão constrói / executa apenas o arquivo mencionado. Para vincular todos os arquivos, você precisa especificar o nome de todos os arquivos durante a execução.
Execute um dos dois comandos abaixo:
Você deve fazer algo semelhante, se quiser construí-los.
fonte
Eu estava procurando a mesma coisa. Para responder à sua pergunta " Como chamar demo em test2 de test1? ", Aqui está a maneira que fiz. Execute este código com o
go run test1.go
comando. Altere current_folder para a pasta onde está test1.go.test1.go
lib \ test2.go
Coloque o arquivo test2.go na subpasta
lib
fonte
package lib; expected main
Se você apenas executar
go run test1.go
e esse arquivo tiver uma referência a uma função em outro arquivo dentro do mesmo pacote, ocorrerá um erro porque você não disse ao Go para executar o pacote inteiro, você disse a ele para executar apenas aquele arquivo.Você pode dizer para executar como um pacote inteiro agrupando os arquivos como um pacote na execução commaned de várias maneiras. Aqui estão alguns exemplos (se o seu terminal estiver no diretório do seu pacote):
go run ./
OU
go run test1.go test2.go
OU
go run *.go
Você pode esperar o mesmo comportamento usando o comando build, e após executar o executável criado será executado como um pacote agrupado, onde os arquivos conhecem as funções uns dos outros, etc. Exemplo:
go build ./
OU
go build test1.go test2.go
OU
go build *.go
E então, simplesmente chamar o executável da linha de comando fornecerá uma saída semelhante ao uso do comando run quando você executou todos os arquivos juntos como um pacote inteiro. Ex:
./test1
Ou qualquer que seja o nome do arquivo executável chamado quando foi criado.
fonte