Wątek przeniesiony 2021-09-16 09:51 z Inne języki programowania przez cerrato.

Nieprawidłowy import biblotek w golang

0
  1. Mam ustawony $GOPATH na $HOME/go
  2. Utworzyłem projekt w $HOME/go/src/goGUI
  3. W roocie projektu stworzyłem plik 'main.go'
  4. Komendą go get 'github.com/fyne-io/fyne pobrałem projekt z repo. Otrzymałem informację zwrotną:
    package github.com/fyne-io/fyne: code in directory /home/mk/go/src/github.com/fyne-io/fyne expects import "fyne.io/fyne"
  5. W pliku `main.go' dodałem kod:
package main

import (
	"fyne-io/fyne/app"
	"fyne-io/fyne/widget"
)

func main() {
	app := app.New()

	w := app.NewWindow("Hello")
	w.SetContent(widget.NewVBox(
		widget.NewLabel("Hello Fyne!"),
		widget.NewButton("Quit", func() {
			app.Quit()
		}),
	))

	w.ShowAndRun()
}

  1. Przy próbie skompilowania progamu dostaję komunikat:
mk@Dell:~/go/src/goGUI$ go run main.go`
	main.go:4:2: cannot find package "fyne-io/fyne/app" in any of:
	/home/mk/go/src/goGUI/vendor/fyne-io/fyne/app (vendor tree)
        /usr/lib/go-1.10/src/fyne-io/fyne/app (from $GOROOT)
        /home/mk/go/src/fyne-io/fyne/app (from $GOPATH)
	main.go:5:2: cannot find package "fyne-io/fyne/widget" in any of:
        /home/mk/go/src/goGUI/vendor/fyne-io/fyne/widget (vendor tree)
        /usr/lib/go-1.10/src/fyne-io/fyne/widget (from $GOROOT)
        /home/mk/go/src/fyne-io/fyne/widget (from $GOPATH)

Nie rozumiem dlaczego jest pomijany folder github.com w /home/mk/go/src/fyne-io/fyne/widget (from $GOPATH)' Poza tym jak przekopiuję repo do /home/mk/go/src/ to znowu dla odmiany otrzymuję komunikat:

mk@Dell:~/go/src/goGUI$ go run main.go`
main.go:4:2: code in directory /home/mk/go/src/fyne-io/fyne/app expects import "fyne.io/fyne/app"
main.go:5:2: code in directory /home/mk/go/src/fyne-io/fyne/widget expects import "fyne.io/fyne/widget"
  1. Ponadto mam zainstalowny dependency managment tool- dep. Przy próbie dodania zależności do projektu komendą: dep ensure -add 'github.com/fyne-io/fyne.git' otrzymuję:
mk@Dell:~/go/src/goGUI$ dep ensure -add github.com/fyne-io/fyne
Fetching sources...
Failed to add the dependencies:
  ✗ failed to fetch source for github.com/fyne-io/fyne.git: unable to update repository: : command failed: [git fetch --tags --prune origin]: exit status 255
adding dependencies failed
0

Nie chce mi się całego reprodukować, ale zauważyłem, że przykład w Githubie pokazuje

import (
	"fyne.io/fyne/widget"
	"fyne.io/fyne/app"
)

U ciebie jest

import (
    "fyne-io/fyne/app"
    "fyne-io/fyne/widget"
)
0

To też jest ciekawe, ponieważ link do repo to: https://github.com/fyne-io/fyne.git
W każdym razie, po części zaczęło działać,tzn w momencie gdy zmieniłem nazwę katalogu fyne-io na fyne.io i przeniosłem bibliotekę do katalogu /home/mk/go/src/.
Natomiast z katalogu /home/mk/go/src/github.com dalej nie chce działać, niezależnie czy wpiszę:

import (
	"fyne.io/fyne/app"
	"fyne.io/fyne/widget"
)

czy

import (
	"github.com/fyne.io/fyne/app"
	"github.com/fyne.io/fyne/widget"
)

I dalej zagadką dla mnie pozostaje dlaczego przeszukiwany jest katalog /home/mk/go/src/fyne.io/fyne/widget (from $GOPATH) a nie /home/mk/go/src/github.com/fyne.io/fyne/widget oraz pkt 7 czyli dlaczego nie mogę pobrać zależności przy pomocy dep

0

Zajrzałem jeszcze raz na Githuba i widzę to czyli chyba instaluje się to inaczej

root@d550a8c08247:/go# go get 'github.com/fyne-io/fyne'
package github.com/fyne-io/fyne: code in directory /go/src/github.com/fyne-io/fyne expects import "fyne.io/fyne"
root@d550a8c08247:/go# go get fyne.io/fyne
root@d550a8c08247:/go#

PS: u mnie działa xD

1

ja mogę rozwinąć :) otóż od wersji Go 1.11 mamy wbudowany manager zależności, lecz Ty korzystasz z https://github.com/golang/dep. Proponuję migrację :)
ta biblioteka korzysta z go modules i dlatego ma plik go.mod. Tam podaje się nazwę pakietu, po której Go będzie zaciągać zależności. Stąd rozbieżność i ostatecznie fyne.io/fyne jako nazwa pakietu.

Z racji tego, że w Go używanie globalnego folderu z zależnościami już nie jest zalecane, to nie powinieneś już sobie tych paczek pobierać sam - niego Go to robi za Ciebie. Wystarczy go get oraz najnowsza wersja samego Go.

1 użytkowników online, w tym zalogowanych: 0, gości: 1