Add go packages

This commit is contained in:
Wilfried OLLIVIER 2020-03-28 11:52:07 +01:00
parent c6d41dad1a
commit b0c40d8ade
2 changed files with 69 additions and 0 deletions

View File

@ -5,6 +5,7 @@
- [Dev](./dev/main.md)
- [Golang](./dev/golang/main.md)
- [Packages](./dev/golang/packages.md)
- [Testing](./dev/golang/testing.md)
- [Elixir](./dev/elixir/main.md)
- [Lambda](./dev/elixir/lambda.md)

View File

@ -0,0 +1,68 @@
# Working with packages
In go, every project, is, at some part, a package.
A package is simply a directory containing go source file.
## Organising projects
In your project, you may need multiple, isolated packages. Here is the most
common project layout in found and I used in all my projects :
```txt
layout -- top project directory
├── build -- all things related to ci
│   └── ci
│   └── ci.yml
├── cmd -- main package, entrypoing
│   └── layout.go
├── Dockerfile -- container build instructions
├── init -- if usefull systemd service file
│   └── layout.service
├── internal -- private packages, ie not to be used in another project
│   └── private
│   └── private.go
├── LICENSE -- license file
├── pkg -- public packages, ie packages like libs, to be importer in another project
│   └── public
│   └── public.go
└── README.md -- readme
```
## Using go mod
Init project
```shell
go mod init github.com/username/project
```
### Add an external dep to your project
Import the required package
```go
import "github.com/example/lib"
```
The next time you will run a go command it will fetch the package, eg :
```shell
go build
```
### In repository packages
Of course, you can also use isolated package you write inside your repository (usefull if you need to split things up)
Let's say, for example, I want to add a new public package `foo` in my project,
```shell
mkdir -p pkg/foo && echo "package foo" > pkg/foo/foo.go
```
After adding stuff in your `foo.go` file, import it using
```go
import "github.com/username/project/foo"
```