{"id":15095949,"url":"https://github.com/jdgabriel/go-learning","last_synced_at":"2026-01-07T04:39:09.521Z","repository":{"id":246418218,"uuid":"821045603","full_name":"jdgabriel/go-learning","owner":"jdgabriel","description":"API example learning in live","archived":false,"fork":false,"pushed_at":"2024-06-28T19:35:58.000Z","size":61,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T17:44:21.581Z","etag":null,"topics":["api","gin-gonic","go","makefile","sqlite","swagger"],"latest_commit_sha":null,"homepage":"https://www.youtube.com/watch?v=wyEYpX5U4Vg\u0026sttick=0","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdgabriel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-27T17:41:36.000Z","updated_at":"2024-09-27T22:08:19.000Z","dependencies_parsed_at":"2024-06-27T22:05:46.998Z","dependency_job_id":"35db12df-0397-4b3d-af8d-83556bd73e00","html_url":"https://github.com/jdgabriel/go-learning","commit_stats":{"total_commits":28,"total_committers":1,"mean_commits":28.0,"dds":0.0,"last_synced_commit":"c1d7a4416b758b28d92797c6cef78a0cffb8b17b"},"previous_names":["jdgabriel/go-learning"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdgabriel%2Fgo-learning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdgabriel%2Fgo-learning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdgabriel%2Fgo-learning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdgabriel%2Fgo-learning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdgabriel","download_url":"https://codeload.github.com/jdgabriel/go-learning/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245852640,"owners_count":20683067,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","gin-gonic","go","makefile","sqlite","swagger"],"created_at":"2024-09-25T15:44:10.565Z","updated_at":"2026-01-07T04:39:04.496Z","avatar_url":"https://github.com/jdgabriel.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aprendendo GO\n\n# Sumário\n\n- [1. Download \u0026 Instalação](#download_install)\n  - [1.1. Download](#donwload)\n  - [1.2. Instalando com ZSH](#install)\n- [2. Start](#start)\n  - [2.1. Iniciando o módulo principal](#start_init)\n- [3. Convenções](#conventions)\n  - [3.1. Métodos públicos e privados do pacote](#conventions_methods)\n  - [3.2. Importando pacotes](#conventions_imports)\n- [4. Tipos de estruturas e variáveis](#struct)\n- [5. Makefile](#make)\n- [6. Documentação com Swagger](#docs)\n\n## \u003ca name=\"download_install\"\u003e\u003c/a\u003e Download \u0026 Instalação\n\n### \u003ca name=\"download\"\u003e\u003c/a\u003e Download\n\n```bash\nhttps://go.dev/doc/install\n```\n\n### \u003ca name=\"install\"\u003e\u003c/a\u003e Instalando com ZSH\n\n1. Instalando go (Substitua `X` pela versão atual)\n\n```bash\n rm -rf /usr/local/go \u0026\u0026 tar -C /usr/local -xzf goX.XX.X.linux-amd64.tar.gz\n```\n\n2. Adicione os paths do GO no `.zshrc`\n\n```bash\n# Add Go lang paths\nexport GOPATH=$HOME/go\nexport GOROOT=/usr/local/go\nexport GOBIN=$GOPATH/bin\nexport PATH=$PATH:$GOPATH\nexport PATH=$PATH:$GOROOT/bin\n```\n\n3. Teste o funcionamento\n\n```bash\ngo version\n```\n\n## \u003ca name=\"start\"\u003e\u003c/a\u003e Start\n\n### \u003ca name=\"start_init\"\u003e\u003c/a\u003e Iniciando o módulo principal\n\nPor convenção e padronização o go usa packages externos da linguagem com o link do repositório, seja Github ou de outro lugar.\u003cbr/\u003e\nPara iniciar uma aplicação em go, precisamos iniciar o `go mod`\n\n```bash\ngo mod init github.com/jdgabriel/go-learning\n```\n\nAo iniciar o módulo será criado o arquivo: `go.mod`\n\n```go\n// go.mod\nmodule github.com/jdgabriel/go-learning\n\ngo 1.22.4\n```\n\n## \u003ca name=\"conventions\"\u003e\u003c/a\u003e Convenções\n\n### \u003ca name=\"conventions_methods\"\u003e\u003c/a\u003e Métodos públicos e privados do pacote\n\nTodo novo módulo deve-se ter na primeira linha do arquivo o nome do pacote\n\n```go\npackage NOME_DO_MODULO\n// e.g. package main\n// e.g. package router\n// e.g. package user\n```\n\n| Norma                    | Tipo    | Exemplo                      |\n| ------------------------ | ------- | ---------------------------- |\n| Primeira letra maiúscula | PUBLICA | `func Initialize(){ //... }` |\n| Primeira letra minúscula | PRIVADA | `func initialize(){ //... }` |\n\n### \u003ca name=\"conventions_imports\"\u003e\u003c/a\u003e Importando pacotes\n\nPara importar um pacote temos duas maneiras, a direta e a indireta\n\n#### Método direto\n\n```bash\ngo get -u github.com/gin-gonic/gin\n```\n\n#### Método indireto\n\nImportar dentro do arquivo que vai usar o módulo\n\n```bash\nimport \"github.com/gin-gonic/gin\"\n```\n\nAssim 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.\n\n```bash\ngo mod tidy\n```\n\nApós o comando será criado um arquivo, o `go.sum` onde temos o lock de todas as versões dos pacotes instalados no projeto.\u003cbr\u003e\nAgora o o `go.mod` terá dois `require`\n\n```go\nmodule github.com/jdgabriel/go-learning\n\ngo 1.22.4\n\n// direct\nrequire github.com/gin-gonic/gin v1.10.0\n\nrequire (\n\t... // indirect\n)\n```\n\n### \u003ca name=\"struct\"\u003e\u003c/a\u003e Tipos de estruturas e variáveis\n\n| Tipo        | Padrão                            | ~                                                                                             | Exemplo                                        |\n| ----------- | --------------------------------- | --------------------------------------------------------------------------------------------- | ---------------------------------------------- |\n| Declarative | `:=`                              | Criar uma variável e atribuir o retorno                                                       | `v1 := router.Group(\"/api/v1\")`                |\n| Pointer     | `*`                               | Endereço do objeto em memória para ser usado em qualquer ponto do projeto                     | `*gin.Engine`                                  |\n| Struct      | `struct`                          | Equivalente a um `objeto`                                                                     | `type Product struct {...}`                    |\n| Address     | `\u0026`                               | Indicação de endereço de uma struct criada                                                    | `return \u0026Logger {...}`                         |\n| 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{}) {}` |\n\n### \u003ca name=\"make\"\u003e\u003c/a\u003e Makefile\n\n#### \u003ca name=\"make_script\"\u003e\u003c/a\u003e Scripts para rodar o projeto\n\nRode qualquer comando com `make \u003cCOMANDO\u003e`\n\n1. Rodar o projeto | `make run`\n\n```bash\nrun:\n\t@go run main.go\n```\n\n2. Rodar o projeto com documentação `:8080/docs/index.html`\n\n```bash\nrun-with-docs:\n\t@swag init\n\t@go run main.go\n```\n\n3. Build do projeto para a pasta `cmd/`\n\n```bash\nbuild:\n\t@go build -o cmd/$(APP_NAME) main.go\n```\n\n3. Build do projeto para a pasta `cmd/`\n\n```bash\ntest:\n\t@go test ./ ...\n```\n\n4. Iniciar documentação\n\n```bash\ndocs:\n\t@swag init\n```\n\n5. Limpar pastas de documentos e binário do projeto\n\n```bash\nclean:\n\t@rm -f cmd/$(APP_NAME)\n\t@rm -rf ./docs\n```\n\n### \u003ca name=\"docs\"\u003e\u003c/a\u003e Documentação\n\n#### \u003ca name=\"docs_swagger\"\u003e\u003c/a\u003e Swagger\n\n```bash\nhttp://localhost:8080/docs/index.html\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdgabriel%2Fgo-learning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdgabriel%2Fgo-learning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdgabriel%2Fgo-learning/lists"}