“undefined” functie gedeclareerd in een ander bestand?

Ik probeer een standaard go-programma te schrijven dat een functie aanroept in een ander bestand, maar een deel van hetzelfde pakket. Het keert echter terug:

undefined: NewEmployee

Hier is de broncode:

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

Antwoord 1, autoriteit 100%

Lees a.u.b. “Go-code schrijven”.

Gebruik go buildof go installin de pakketdirectory, of geef een importpad op voor het pakket. Gebruik geen bestandsargumenten voor buildof install.

Hoewel je bestandsargumenten kunt gebruiken voor go run, moet je in plaats daarvan een pakket bouwen, meestal met go run ., hoewel je bijna altijd go install, of go build.


Antwoord 2, autoriteit 45%

Ik had net hetzelfde probleem in GoLand (dat is Intellij IDEA for Go) en heb een oplossing bedacht. U moet de Run kindwijzigen van Filein Packageof Directory. Je kunt dit kiezen uit een vervolgkeuzelijst als je naar Run/EditConfiguraties gaat.

Bijvoorbeeld: gebruik voor pakket ~/go/src/a_packageeen Package pathvan a_packageen een Directoryvan ~/go/src/a_packageen Run kindvan Packageof Directory.


Antwoord 3, autoriteit 12%

Als je go rungebruikt, voer dan go run *.gouit. Het zal automatisch alle go-bestanden in de huidige werkdirectory vinden, compileren en vervolgens uw hoofdfunctie uitvoeren.


Antwoord 4, autoriteit 5%

Je kunt een van de volgende dingen proberen:

Methode 1:

  • Stel dat uw projectnaam MyProject
  • is

  • Ga naar je pad, voer go build
  • uit

  • Het zal een uitvoerbaar bestand maken als uw projectnaam (“MyProject”)
  • Voer vervolgens het uitvoerbare bestand uit met ./MyProject

Je kunt beide stappen tegelijk uitvoeren door go build && ./MyProject. Go-bestanden van het package mainworden gecompileerd tot een uitvoerbaar bestand.

Methode 2:

  • Voer gewoon go run *.gouit. Er wordt geen uitvoerbaar bestand gemaakt, maar het werkt wel.

Antwoord 5, autoriteit 4%

go run .zal al je bestanden uitvoeren. Het ingangspunt is de functie main()die uniek moet zijn voor het mainpakket.

Een andere optie is om het binaire bestand te bouwen met go builden het uit te voeren.


Antwoord 6, autoriteit 2%

Als je een functie uit een ander go-bestand wilt aanroepen en je gebruikt Goland, zoek dan de optie ‘Configuratie bewerken’ in het menu Uitvoeren en verander het type run van Bestand naar Directory. Het wist alle fouten en stelt je in staat om functies uit andere go-bestanden aan te roepen.

Other episodes