github.com/kubeshop/testkube@v1.17.23/contrib/executor/artillery/pkg/README.md (about)

     1  # `/pkg`
     2  
     3  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.
     4  
     5  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)).
     6  
     7  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.
     8  
     9  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).
    10  
    11  The `pkg` directory origins: The old Go source code used to use `pkg` for its packages and then various Go projects in the community started copying the pattern (see [`this`](https://twitter.com/bradfitz/status/1039512487538970624) Brad Fitzpatrick's tweet for more context).
    12  
    13  
    14  Examples:
    15  
    16  * https://github.com/prometheus/prometheus/tree/master/pkg
    17  * https://github.com/jaegertracing/jaeger/tree/master/pkg
    18  * https://github.com/istio/istio/tree/master/pkg
    19  * https://github.com/GoogleContainerTools/kaniko/tree/master/pkg
    20  * https://github.com/google/gvisor/tree/master/pkg
    21  * https://github.com/google/syzkaller/tree/master/pkg
    22  * https://github.com/perkeep/perkeep/tree/master/pkg
    23  * https://github.com/minio/minio/tree/master/pkg
    24  * https://github.com/heptio/ark/tree/master/pkg
    25  * https://github.com/argoproj/argo/tree/master/pkg
    26  * https://github.com/heptio/sonobuoy/tree/master/pkg
    27  * https://github.com/helm/helm/tree/master/pkg
    28  * https://github.com/kubernetes/kubernetes/tree/master/pkg
    29  * https://github.com/kubernetes/kops/tree/master/pkg
    30  * https://github.com/moby/moby/tree/master/pkg
    31  * https://github.com/grafana/grafana/tree/master/pkg
    32  * https://github.com/influxdata/influxdb/tree/master/pkg
    33  * https://github.com/cockroachdb/cockroach/tree/master/pkg
    34  * https://github.com/derekparker/delve/tree/master/pkg
    35  * https://github.com/etcd-io/etcd/tree/master/pkg
    36  * https://github.com/oklog/oklog/tree/master/pkg
    37  * https://github.com/flynn/flynn/tree/master/pkg
    38  * https://github.com/jesseduffield/lazygit/tree/master/pkg
    39  * https://github.com/gopasspw/gopass/tree/master/pkg
    40  * https://github.com/sosedoff/pgweb/tree/master/pkg
    41  * https://github.com/GoogleContainerTools/skaffold/tree/master/pkg
    42  * https://github.com/knative/serving/tree/master/pkg
    43  * https://github.com/grafana/loki/tree/master/pkg
    44  * https://github.com/bloomberg/goldpinger/tree/master/pkg
    45  * https://github.com/Ne0nd0g/merlin/tree/master/pkg
    46  * https://github.com/jenkins-x/jx/tree/master/pkg
    47  * https://github.com/DataDog/datadog-agent/tree/master/pkg
    48  * https://github.com/dapr/dapr/tree/master/pkg
    49  * https://github.com/cortexproject/cortex/tree/master/pkg
    50  * https://github.com/dexidp/dex/tree/master/pkg
    51  * https://github.com/pusher/oauth2_proxy/tree/master/pkg
    52  * https://github.com/pdfcpu/pdfcpu/tree/master/pkg
    53  * https://github.com/weaveworks/kured/tree/master/pkg
    54  * https://github.com/weaveworks/footloose/tree/master/pkg
    55  * https://github.com/weaveworks/ignite/tree/master/pkg
    56  * https://github.com/tmrts/boilr/tree/master/pkg
    57  * https://github.com/kata-containers/runtime/tree/master/pkg
    58  * https://github.com/okteto/okteto/tree/master/pkg
    59  * https://github.com/solo-io/squash/tree/master/pkg