Vraag golang "undefined" -functie gedeclareerd in een ander bestand?


Ik probeer een basis-go-programma te schrijven dat een functie op een ander bestand aanroept, maar een deel van hetzelfde pakket. Het geeft 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!"
}

Bij voorbaat bedankt


62
2018-01-26 15:27


oorsprong


antwoorden:


Gelieve te lezen "Hoe Go Code te schrijven".

Niet gebruiken /src in uw GOPATH. Pakketten bevinden zich in $GOPATH/src.

Voor build of install u moet uw bestanden in een pakketdirectory hebben.

Voor go run, je moet alle bestanden als argument leveren:

go run main.go employee.go

Maar je zou bijna altijd moeten gebruiken go installof go build (en bij voorkeur de eerste, zoals go build veroorzaakt verwarring bij het werken met niet-hoofdpakketten)


89
2018-01-26 15:46



Ik had net hetzelfde probleem in GoLand en mijn oplossing was goed. U moet de Run kind van File naar Package of Directory. Je kunt dit kiezen in een vervolgkeuzemenu als je er naar toe gaat Run/Edit Configuraties.

Voor pakket ~/go/src/a_package, de Package path is a_package en de Directory is ~/go/src/a_package. U kunt kiezen voor Run kind die je leuk vindt.


21
2017-07-05 06:01



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 wijzig de run-soort van Bestand naar Map. Hiermee worden alle fouten gewist en kunt u functies van andere bestanden openen.


1
2018-06-01 03:25



Als uw bronmap gestructureerd / go / src / blog is (ervan uitgaande dat de naam van uw bronmap blog is).

  1. cd / go / src / blog ... (cd in de map met je pakket)
  2. ga installeren
  3. blog

Dat zou al uw bestanden tegelijkertijd moeten uitvoeren, in plaats van dat u de bestanden handmatig moet weergeven of een methode op de opdrachtregel "bashing".


0
2017-11-30 20:22



Als je gebruikt go run, doe go run *.go. Het zal automatisch alle bestanden in de huidige werkmap vinden, compileer en voer dan je hoofdfunctie uit.


0
2018-05-29 21:31