- 1. Download & Instalação
- 2. Start
- 3. Convenções
- 4. Tipos de estruturas e variáveis
- 5. Makefile
- 6. Documentação com Swagger
https://go.dev/doc/install
- Instalando go (Substitua
X
pela versão atual)
rm -rf /usr/local/go && tar -C /usr/local -xzf goX.XX.X.linux-amd64.tar.gz
- Adicione os paths do GO no
.zshrc
# Add Go lang paths
export GOPATH=$HOME/go
export GOROOT=/usr/local/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH
export PATH=$PATH:$GOROOT/bin
- Teste o funcionamento
go version
Por convenção e padronização o go usa packages externos da linguagem com o link do repositório, seja Github ou de outro lugar.
Para iniciar uma aplicação em go, precisamos iniciar o go mod
go mod init github.com/jdgabriel/go-learning
Ao iniciar o módulo será criado o arquivo: go.mod
// go.mod
module github.com/jdgabriel/go-learning
go 1.22.4
Todo novo módulo deve-se ter na primeira linha do arquivo o nome do pacote
package NOME_DO_MODULO
// e.g. package main
// e.g. package router
// e.g. package user
Norma | Tipo | Exemplo |
---|---|---|
Primeira letra maiúscula | PUBLICA | func Initialize(){ //... } |
Primeira letra minúscula | PRIVADA | func initialize(){ //... } |
Para importar um pacote temos duas maneiras, a direta e a indireta
go get -u github.com/gin-gonic/gin
Importar dentro do arquivo que vai usar o módulo
import "github.com/gin-gonic/gin"
Assim temos que executar o seguinte comando. Este comando faz o download de todos os pacotes relacionados diretamente e indiretamente com seu projeto, e pacotes existentes.
go mod tidy
Após o comando será criado um arquivo, o go.sum
onde temos o lock de todas as versões dos pacotes instalados no projeto.
Agora o o go.mod
terá dois require
module github.com/jdgabriel/go-learning
go 1.22.4
// direct
require github.com/gin-gonic/gin v1.10.0
require (
... // indirect
)
Tipo | Padrão | ~ | Exemplo |
---|---|---|---|
Declarative | := |
Criar uma variável e atribuir o retorno | v1 := router.Group("/api/v1") |
Pointer | * |
Endereço do objeto em memória para ser usado em qualquer ponto do projeto | *gin.Engine |
Struct | struct |
Equivalente a um objeto |
type Product struct {...} |
Address | & |
Indicação de endereço de uma struct criada | return &Logger {...} |
Func Args | ...interface{} OU interface{} |
Representa a interface ou um "array" de argumentos da função. Com interface fazia ou definida | func (log *Logger) Info(v ...interface{}) {} |
Rode qualquer comando com make <COMANDO>
- Rodar o projeto |
make run
run:
@go run main.go
- Rodar o projeto com documentação
:8080/docs/index.html
run-with-docs:
@swag init
@go run main.go
- Build do projeto para a pasta
cmd/
build:
@go build -o cmd/$(APP_NAME) main.go
- Build do projeto para a pasta
cmd/
test:
@go test ./ ...
- Iniciar documentação
docs:
@swag init
- Limpar pastas de documentos e binário do projeto
clean:
@rm -f cmd/$(APP_NAME)
@rm -rf ./docs
http://localhost:8080/docs/index.html