Home  >  Article  >  Backend Development  >  How to avoid making dependencies available to all packages in a module?

How to avoid making dependencies available to all packages in a module?

王林
王林forward
2024-02-05 23:57:071051browse

How to avoid making dependencies available to all packages in a module?

Question content

Having a .net background, I'm currently trying to adapt my first go project to a more typical go project structure ( similar to this). What I don't understand is how to avoid dependencies accidentally ending up in packages they don't belong to.

Suppose I have a project consisting of two parts, an application named foo and a model.

  • My model has few dependencies
  • foo Applications may depend on http, logging, metrics, etc. libraries.

The project might look like this:

├── go.mod
├── go.sum
├── model
│   ├── person.go
│   └── address.go
├── cmd
│   └── runfoo
│       └── main.go
└── foolib
    └── applicationlogic.go

But since the module files are in the root directory, go get github.com/httplib will make httplib available for that model as well. This method has disadvantages:

  • It's very simple (especially with features like vscode's auto-import), and sometimes it's easy to require httplib in a model even though it definitely doesn't belong there.
  • Looking at go.mod, I can't figure out which dependencies are for the model and which are for the application.

Now, I could use very fine-grained modules and add go.work files for development, but this feels difficult to maintain (and not aligned with the reference structure).

How to avoid making dependencies available to all packages? Is this wise?


Correct Answer


How to avoid making dependencies available to all packages [? ]

You can't (use a module).

[...]Is this wise?

No, absolutely not.

The "disadvantages" you see are not problematic at all and will not cause any problems in practice.

The above is the detailed content of How to avoid making dependencies available to all packages in a module?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete