Go Modules vs Package
Asked Answered
B

2

31

just starting to learn about Go Modules. I have a question on importing local packages inside the same module. The example I am looking at is this repo:

https://github.com/Azure/azure-service-bus-go

The module is module github.com/Azure/azure-service-bus-go. There is a separate package inside that module, atom (but it's not a module itself). When files inside the main package import atom, they do it like this: import "github.com/Azure/azure-service-bus-go/atom" -- see queue_manager.go as an example.

What I do not quite understand -- how does GO know to look at the local atom package, as opposed to, say the one on Github? It seems confusing to me that something that is part of the module being modified is referenced by a remote/absolute URI. Is it guaranteed that if I modify the file on local disk and build I'm actually referencing the latest version as opposed to something already pushed?

As a toy exercise I tried to create a module with a non-existent Github URI and it did in fact appear that go mod tidy tried to look that up against Github, even though a local copy did in fact exist

Behling answered 21/5, 2020 at 17:18 Comment(2)
Because of the go.mod file. The go.mod file contains the full name of the module, so the build system knows not to lookup packages in that module remotely. Run go mod init for your project.Buddhism
How to Write Go Code walk you through an example module demonstrating how this worksBaroja
J
30

List item

  • A module is a collection of go packages.
  • A package is a directory of .go files. Using packages, you organize your code into reusable units.
  • We can add a module to go project or upgrade the module version.
Jawbone answered 29/4, 2022 at 14:11 Comment(2)
I like the structure shown, but I see herein some breaking point regarding to Learning Go by J.Bodner, cited "While you can store more than one module in a repository, it isn’t encouraged. Everything within a module is versioned together. Maintaining two modules in one repository means tracking separate versions for two different projects in a single repository" . Again I am coming from Node.js world to go, so I am still in a shadow of learning Golang good practices so I might be mistaken, what do you think @Hamed Naeemaei ?Wilser
It's better to have a module per each repositoryJawbone
H
8

The module directive in the go.mod file declares the import-path prefix for all of the packages within that module.

If you are just starting to learn about Go modules, the Create a Go module tutorial might be a good place to start.

Handtomouth answered 12/2, 2021 at 21:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.