You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 4.2 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # `/pkg`
  2. Library code that's ok to use by external applications (e.g., `/pkg/mypubliclib`). Other projects will import these libraries expecting them to work, so think twice before you put something here :-) Note that the `internal` directory is a better way to ensure your private packages are not importable because it's enforced by Go. The `/pkg` directory is still a good way to explicitly communicate that the code in that directory is safe for use by others. The [`I'll take pkg over internal`](https://travisjeffery.com/b/2019/11/i-ll-take-pkg-over-internal/) blog post by Travis Jeffery provides a good overview of the `pkg` and `internal` directories and when it might make sense to use them.
  3. It's also a way to group Go code in one place when your root directory contains lots of non-Go components and directories making it easier to run various Go tools (as mentioned in these talks: [`Best Practices for Industrial Programming`](https://www.youtube.com/watch?v=PTE4VJIdHPg) from GopherCon EU 2018, [GopherCon 2018: Kat Zien - How Do You Structure Your Go Apps](https://www.youtube.com/watch?v=oL6JBUk6tj0) and [GoLab 2018 - Massimiliano Pippi - Project layout patterns in Go](https://www.youtube.com/watch?v=3gQa1LWwuzk)).
  4. Note that this is not a universally accepted pattern and for every popular repo that uses it you can find 10 that don't. It's up to you to decide if you want to use this pattern or not. Regardless of whether or not it's a good pattern more people will know what you mean than not. It might a bit confusing for some of the new Go devs, but it's a pretty simple confusion to resolve and that's one of the goals for this project layout repo.
  5. Ok not to use it if your app project is really small and where an extra level of nesting doesn't add much value (unless you really want to). Think about it when it's getting big enough and your root directory gets pretty busy (especially if you have a lot of non-Go app components).
  6. Examples:
  7. * https://github.com/jaegertracing/jaeger/tree/master/pkg
  8. * https://github.com/istio/istio/tree/master/pkg
  9. * https://github.com/GoogleContainerTools/kaniko/tree/master/pkg
  10. * https://github.com/google/gvisor/tree/master/pkg
  11. * https://github.com/google/syzkaller/tree/master/pkg
  12. * https://github.com/perkeep/perkeep/tree/master/pkg
  13. * https://github.com/heptio/ark/tree/master/pkg
  14. * https://github.com/argoproj/argo/tree/master/pkg
  15. * https://github.com/heptio/sonobuoy/tree/master/pkg
  16. * https://github.com/helm/helm/tree/master/pkg
  17. * https://github.com/kubernetes/kubernetes/tree/master/pkg
  18. * https://github.com/kubernetes/kops/tree/master/pkg
  19. * https://github.com/moby/moby/tree/master/pkg
  20. * https://github.com/grafana/grafana/tree/master/pkg
  21. * https://github.com/influxdata/influxdb/tree/master/pkg
  22. * https://github.com/cockroachdb/cockroach/tree/master/pkg
  23. * https://github.com/derekparker/delve/tree/master/pkg
  24. * https://github.com/etcd-io/etcd/tree/master/pkg
  25. * https://github.com/oklog/oklog/tree/master/pkg
  26. * https://github.com/flynn/flynn/tree/master/pkg
  27. * https://github.com/jesseduffield/lazygit/tree/master/pkg
  28. * https://github.com/gopasspw/gopass/tree/master/pkg
  29. * https://github.com/sosedoff/pgweb/tree/master/pkg
  30. * https://github.com/GoogleContainerTools/skaffold/tree/master/pkg
  31. * https://github.com/knative/serving/tree/master/pkg
  32. * https://github.com/grafana/loki/tree/master/pkg
  33. * https://github.com/bloomberg/goldpinger/tree/master/pkg
  34. * https://github.com/Ne0nd0g/merlin/tree/master/pkg
  35. * https://github.com/jenkins-x/jx/tree/master/pkg
  36. * https://github.com/DataDog/datadog-agent/tree/master/pkg
  37. * https://github.com/dapr/dapr/tree/master/pkg
  38. * https://github.com/cortexproject/cortex/tree/master/pkg
  39. * https://github.com/dexidp/dex/tree/master/pkg
  40. * https://github.com/pusher/oauth2_proxy/tree/master/pkg
  41. * https://github.com/pdfcpu/pdfcpu/tree/master/pkg
  42. * https://github.com/weaveworks/kured/tree/master/pkg
  43. * https://github.com/weaveworks/footloose/tree/master/pkg
  44. * https://github.com/weaveworks/ignite/tree/master/pkg
  45. * https://github.com/tmrts/boilr/tree/master/pkg
  46. * https://github.com/kata-containers/runtime/tree/master/pkg
  47. * https://github.com/okteto/okteto/tree/master/pkg
  48. * https://github.com/solo-io/squash/tree/master/pkg