Respostas:
Você não pode ter mais de um mainem seu pacote.
Mais geralmente, você não pode ter mais de uma função com um determinado nome em um pacote.
Remova o mainem test2.goe compile o aplicativo. A demofunção ficará visível a partir de test1.go.
mainem test2.go, mas não conseguiu executar test1.go usando go run test1.goainda. 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:
$go run test1.go test2.go. //order of file doesn't matter
$go run *.go
Você deve fazer algo semelhante, se quiser construí-los.
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.gocomando. Altere current_folder para a pasta onde está test1.go.
test1.go
package main
import (
L "./lib"
)
func main() {
L.Demo()
}
lib \ test2.go
Coloque o arquivo test2.go na subpasta lib
package lib
import "fmt"
// This func must be Exported, Capitalized, and comment added.
func Demo() {
fmt.Println("HI")
}
package lib; expected main
Se você apenas executar go run test1.goe 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.
go fmt? Como no terminal ou o quê? Como isso mostra que ele se preocupa com alguma coisa?