[Adding Matthew] On Mon, Oct 25, 2021 at 04:45:03PM +0300, Nir Soffer wrote: > I'm playing with libnbd go module, planning to use it in a new command[1] > > The biggest obstacle for me is that the module is not published in a way that > Go developers expect. > > The module is listed in: > https://pkg.go.dev/github.com/libguestfs/libnbd/golang > > But the module actually lives in: > https://github.com/libguestfs/libnbd/tree/master/golang/src/libguestfs.org/libnbd > > So the pkg.go.dev page is broken, .e.g no there is no documation or license, > and > the suggested import is wrong. > > The module name is "libguestfs.org/libnbd". But if you try to use it, > for example > in the (improved) example from libnbd-golang.pod: > > $ cat test.go > package main > > import "fmt" > import "libguestfs.org/libnbd" > > func main() { > h, err := libnbd.Create() > if err != nil { > panic(err) > } > defer h.Close() > uri := "nbd://localhost" > err = h.ConnectUri(uri) > if err != nil { > panic(err) > } > size, err := h.GetSize() > if err != nil { > panic(err) > } > fmt.Printf("size of %s = %d\n", uri, size) > } > > $ go mod init example/test > go: creating new go.mod: module example/test > go: to add module requirements and sums: > go mod tidy > > $ go mod tidy > go: finding module for package libguestfs.org/libnbd > example/test imports > libguestfs.org/libnbd: cannot find module providing package > libguestfs.org/libnbd: unrecognized import path > "libguestfs.org/libnbd": reading > https://libguestfs.org/libnbd?go-get=1: 404 Not Found
That website is entirely static so if it involves fetching stuff from there it's probably not going to work. > If we use libguestfs.org, https://libguestfs.org/libnbd?go-get=1 > should return the expected > metadata instead of 404. > > But even if "libguestfs.org/libnbd" would work, we cannot use the > module from the source > since the source is missing the generated files (wrappers.go, binding.go, > ...). I believe that Matthew hit this problem too ... > It looks like the only ways to use the module are: > > - Vendor the go code from the tarball. > > I did not try this since I don't want to copy libnbd into source into > my project. > > - Clone and build libnbd locally, and replace libguestfs.org with the > path to your local source > > $ go mod edit -replace > libguestfs.org/libnbd=../../src/libnbd/golang/src/libguestfs.org/libnbd > $ go mod tidy > go: found libguestfs.org/libnbd in libguestfs.org/libnbd > v0.0.0-00010101000000-000000000000 > > $ cat go.mod > module example/test > > go 1.16 > > replace libguestfs.org/libnbd => > ../../src/libnbd/golang/src/libguestfs.org/libnbd > > require libguestfs.org/libnbd v0.0.0-00010101000000-000000000000 > > > But the version is wrong - it should be v1.10.0. > I think the issue is missing tag: > https://golang.org/ref/mod#vcs-version > > If a module is defined in a subdirectory within the repository, > that is, the module subdirectory > portion of the module path is not empty, then each tag name must > be prefixed with the module > subdirectory, followed by a slash. For example, the module > golang.org/x/tools/gopls is defined > in the gopls subdirectory of the repository with root path > golang.org/x/tools. The version v0.4.0 > of that module must have the tag named gopls/v0.4.0 in that repository. > > So the linbd project needs a tag like: > golang/src/libguestfs.org/libnbd/v1.10.0 I'm not sure I understand what this all means. Is that the literal name of the git tag (ie. git tag golang/src/libguestfs.org/libnbd/v1.10.0 )? > Removing the "src/libguestfs.org" directories will clean things up: > golang/libnbd/v1.10.0 > > I hope we can solve this issue. Making the go binding easy to use for > developers is > important for making libnbd more popular in the Go community. > > [1] https://gerrit.ovirt.org/c/ovirt-imageio/+/117277 Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org _______________________________________________ Libguestfs mailing list [email protected] https://listman.redhat.com/mailman/listinfo/libguestfs
