From 2d1e32a7e0a856fc68151a96378a696ca70af326 Mon Sep 17 00:00:00 2001 From: anazibinurasheed Date: Wed, 6 Sep 2023 13:19:34 +0530 Subject: [PATCH 1/2] Updated the README.md file by adding a paragraph that provides further clarification on the purpose of the 'internal' directory. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 20c8c53..3396548 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,8 @@ Private application and library code. This is the code you don't want others imp You can optionally add a bit of extra structure to your internal packages to separate your shared and non-shared internal code. It's not required (especially for smaller projects), but it's nice to have visual clues showing the intended package use. Your actual application code can go in the `/internal/app` directory (e.g., `/internal/app/myapp`) and the code shared by those apps in the `/internal/pkg` directory (e.g., `/internal/pkg/myprivlib`). +You use internal directories to make packages private. If you put a package inside an internal directory, then other packages can’t import it unless they share a common ancestor. It’s the only directory named in Go’s documentation and has special compiler treatment. + ### `/pkg` 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. From 0bfa73e2bab0ac7fdcc66772977768847a3ebb99 Mon Sep 17 00:00:00 2001 From: anazibinurasheed Date: Wed, 6 Sep 2023 13:35:43 +0530 Subject: [PATCH 2/2] Updated the README.md file by adding a paragraph that provides further clarification on the purpose of the 'internal' directory. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3396548..2766281 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Private application and library code. This is the code you don't want others imp You can optionally add a bit of extra structure to your internal packages to separate your shared and non-shared internal code. It's not required (especially for smaller projects), but it's nice to have visual clues showing the intended package use. Your actual application code can go in the `/internal/app` directory (e.g., `/internal/app/myapp`) and the code shared by those apps in the `/internal/pkg` directory (e.g., `/internal/pkg/myprivlib`). -You use internal directories to make packages private. If you put a package inside an internal directory, then other packages can’t import it unless they share a common ancestor. It’s the only directory named in Go’s documentation and has special compiler treatment. +You use internal directories to make packages private. If you put a package inside an internal directory, then other packages can’t import it unless they share a common ancestor. And it’s the only directory named in Go’s documentation and has special compiler treatment. ### `/pkg`