Go Project: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 35: Line 35:
The directory contains the main applications for this project. If the project has multiple executables, their code should live under their own directory, and the name of the directory should match the name of the executable. Do not put a lot of code in the <code>/cmd</code> directory. If you think the code can be imported and used in other projects, put it in the <code>[[#pkg|/pkg]]</code> directory. If the code is not reusable, put it in the <code>[[#internal|/internal]]</code> directory. It's common to have a small <code>main</code> function that imports and invokes the code from the <code>/internal</code> and <code>/pkg</code> directories and nothing else.
The directory contains the main applications for this project. If the project has multiple executables, their code should live under their own directory, and the name of the directory should match the name of the executable. Do not put a lot of code in the <code>/cmd</code> directory. If you think the code can be imported and used in other projects, put it in the <code>[[#pkg|/pkg]]</code> directory. If the code is not reusable, put it in the <code>[[#internal|/internal]]</code> directory. It's common to have a small <code>main</code> function that imports and invokes the code from the <code>/internal</code> and <code>/pkg</code> directories and nothing else.


<code>myserver.go:</code>
<span id='myserver.go'></span><code>myserver.go</code>


<syntaxhighlight lang='go'>
<syntaxhighlight lang='go'>

Revision as of 19:10, 14 December 2023

External

Internal

Overview

This page collects recommendation and facts about Go projects and it was mainly written with the assumption that one project lives in its own repository and contains a single module, as described in Packages, Modules, Projects and Repositories. Of course project can contain multiple modules, but that is not recommended.

Project Layout

This layout is inspired by:

https://github.com/golang-standards/project-layout

.
├── cmd
│    ├── myserver 
│    │    └── myserver.go
│    └── myclient
│         └── myclient.go
├── pkg
├── internal
├── Makefile
├── README.md
├── go.mod
├── go.sum
└── .gitignore


Directories

cmd

The directory contains the main applications for this project. If the project has multiple executables, their code should live under their own directory, and the name of the directory should match the name of the executable. Do not put a lot of code in the /cmd directory. If you think the code can be imported and used in other projects, put it in the /pkg directory. If the code is not reusable, put it in the /internal directory. It's common to have a small main function that imports and invokes the code from the /internal and /pkg directories and nothing else.

myserver.go

package main

import "fmt"

func main() {
	fmt.Print("starting my service ...\n")
}

pkg

internal

Microservice-based Project Layout

Microservices in Go | Project Layout

TODO

Integrate Vendoring.