From 3a03a458cf46ce851c7339448ff11de295fc7514 Mon Sep 17 00:00:00 2001 From: Caio Almeida Date: Mon, 15 Feb 2021 11:44:49 -0300 Subject: [PATCH 1/5] Add portuguese translation --- README.md | 1 + README_es.md | 1 + README_fr.md | 1 + README_ja.md | 1 + README_ko.md | 1 + README_ptBR.md | 202 ++++++++++++++++++++++++++++++++++++++++++++++++ README_zh-CN.md | 1 + README_zh-TW.md | 1 + README_zh.md | 1 + 9 files changed, 210 insertions(+) create mode 100644 README_ptBR.md diff --git a/README.md b/README.md index bec7265..939e65a 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Translations: * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) ## Overview diff --git a/README_es.md b/README_es.md index 3fa65ac..27100ab 100644 --- a/README_es.md +++ b/README_es.md @@ -9,6 +9,7 @@ Traducciones: * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) ## Resumen diff --git a/README_fr.md b/README_fr.md index 38da160..4d1ce0a 100644 --- a/README_fr.md +++ b/README_fr.md @@ -9,6 +9,7 @@ Traductions: * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) ## Introduction diff --git a/README_ja.md b/README_ja.md index 0bdb595..8507fb8 100644 --- a/README_ja.md +++ b/README_ja.md @@ -9,6 +9,7 @@ * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) ## 概要 diff --git a/README_ko.md b/README_ko.md index 2a9459c..a89a5e7 100644 --- a/README_ko.md +++ b/README_ko.md @@ -9,6 +9,7 @@ * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) ## 개요 diff --git a/README_ptBR.md b/README_ptBR.md new file mode 100644 index 0000000..c71d69f --- /dev/null +++ b/README_ptBR.md @@ -0,0 +1,202 @@ +# Layout padrão do projetos em Go + +Traduções: + +* [English](README.md) +* [한국어 문서](README_ko.md) +* [简体中文](README_zh.md) +* [正體中文](README_zh-TW.md) +* [简体中文](README_zh-CN.md) - ??? +* [Français](README_fr.md) +* [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) +* [Español](README_es.md) + +## Visão geral + +Este é um layout básico para projetos de aplicativos Go. Não é um padrão oficial definido pela equipe principal de desenvolvimento de Go; no entanto, é um conjunto de padrões de layout de projetos históricos e emergentes comuns no ecossistema Go. Alguns desses padrões são mais populares do que outros. Ele também possui uma série de pequenos aprimoramentos junto com vários diretórios de suporte comuns a qualquer aplicativo grande o suficiente do mundo real. + +Se você está tentando aprender Go ou se está construindo um PoC(Prova de conceito) ou um pequeno projeto pessoal para você, este layout de projeto é um exagero. Comece com algo realmente simples (um único arquivo `main.go` é mais do que suficiente). Conforme seu projeto cresce, lembre-se de que será importante garantir que seu código esteja bem estruturado, caso contrário, você acabará com um código confuso com muitas dependências ocultas e estado global. Quando você tiver mais pessoas trabalhando no projeto, precisará de ainda mais estrutura. É quando é importante apresentar uma maneira comum de gerenciar pacotes/bibliotecas. Quando você tem um projeto de código aberto ou quando conhece outros projetos, importe o código do seu repositório de projetos, é quando é importante ter pacotes e códigos privados (também conhecidos como `internal`). Clone o repositório, mantenha o que você precisa e exclua todo o resto! Só porque está lá, não significa que você precise usar tudo. Nenhum desses padrões é usado em todos os projetos. Mesmo o padrão `vendor` não é universal. + +Com Go 1.14 [`Go Modules`](https://github.com/golang/go/wiki/Modules) estão finalmente prontos para produção. Use [`Go Modules`](https://blog.golang.org/using-go-modules) a menos que você tenha um motivo específico para não usá-los e, se tiver, não precisa se preocupar com $GOPATH e onde você colocou seu projeto. O arquivo `go.mod` básico no reposiório assume que seu projeto está hospedado no GitHub, mas não é um requisito. O caminho do módulo pode ser qualquer coisa, embora o primeiro componente do caminho do módulo deva ter um ponto em seu nome (a versão atual do Go não o impõe mais, mas se você estiver usando versões um pouco mais antigas, não se surpreenda se suas compilações falharem sem isto). Veja as issues [`37554`](https://github.com/golang/go/issues/37554) e [`32819`](https://github.com/golang/go/issues/32819) se você quiser saber mais sobre isso. + +Este layout de projeto é intencionalmente genérico e não tenta impor uma estrutura de pacote Go específica. + +Este é um esforço da comunidade. Abra uma nova issue se você ver um novo padrão ou se você acha que um dos padrões existentes precisa ser atualizado. + +Se precisar de ajuda com nomenclatura, formatação e estilo, comece executando [`gofmt`](https://golang.org/cmd/gofmt/) e [`golint`](https://github.com/golang/lint). Além disso, certifique-se de ler estas diretrizes e recomendações de estilo de código Go: +* https://talks.golang.org/2014/names.slide +* https://golang.org/doc/effective_go.html#names +* https://blog.golang.org/package-names +* https://github.com/golang/go/wiki/CodeReviewComments +* [Style guideline for Go packages](https://rakyll.org/style-packages) (rakyll/JBD) + +Veja [`Go Project Layout`](https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2) para obter informações adicionais. + +Mais sobre como nomear e organizar pacotes, bem como outras recomendações de estrutura de código: +* [GopherCon EU 2018: Peter Bourgon - Best Practices for Industrial Programming](https://www.youtube.com/watch?v=PTE4VJIdHPg) +* [GopherCon Russia 2018: Ashley McNamara + Brian Ketelsen - Go best practices.](https://www.youtube.com/watch?v=MzTcsI6tn-0) +* [GopherCon 2017: Edward Muller - Go Anti-Patterns](https://www.youtube.com/watch?v=ltqV6pDKZD8) +* [GopherCon 2018: Kat Zien - How Do You Structure Your Go Apps](https://www.youtube.com/watch?v=oL6JBUk6tj0) + +Uma postagem chinesa sobre as diretrizes de design orientado a pacotes e a camada de arquitetura +* [面向包的设计和架构分层](https://github.com/danceyoung/paper-code/blob/master/package-oriented-design/packageorienteddesign.md) + +## Diretórios Go + +### `/cmd` + +Principais aplicações para este projeto. + +O nome do diretório para cada aplicativo deve corresponder ao nome do executável que você deseja ter (ex. `/cmd/myapp`). + +Não coloque muitos códigos no diretório do aplicativo. Se você acha que o código pode ser importado e usado em outros projetos, ele deve estar no diretório `/pkg`. Se o código não for reutilizável ou se você não quiser que outros o reutilizem, coloque esse código no diretório `/internal`. Você ficará surpreso com o que os outros farão, então seja explícito sobre suas intenções! + +É comum ter uma pequena função `main` que importa e invoca o código dos diretórios` /internal` e `/pkg` e nada mais. + +Veja o diretório [`/cmd`](cmd/README.md) para mais exemplos. + +### `/internal` + +Aplicativo e código de bibliotecas privado. Este é o código que você não quer que outras pessoas importem em seus aplicativos ou bibliotecas. Observe que esse padrão de layout é imposto pelo próprio compilador Go. Veja o Go 1.4 [`release notes`](https://golang.org/doc/go1.4#internalpackages) para mais detalhes. Observe que você não está limitado ao diretório `internal` de nível superior. Você pode ter mais de um diretório `internal` em qualquer nível da árvore do seu projeto. + +Opcionalmente, você pode adicionar um pouco de estrutura extra aos seus pacotes internos para separar o seu código interno compartilhado e não compartilhado. Não é obrigatório (especialmente para projetos menores), mas é bom ter dicas visuais que mostram o uso pretendido do pacote. Seu atual código da aplicação pode ir para o diretório `/internal/app` (ex. `/internal/app/myapp`) e o código compartilhado por esses aplicativos no diretório `/internal/pkg` (ex. `/internal/pkg/myprivlib`). + +### `/pkg` + +Código de biblioteca que pode ser usado por aplicativos externos (ex. `/pkg/mypubliclib`). Outros projetos irão importar essas bibliotecas esperando que funcionem, então pense duas vezes antes de colocar algo aqui :-) Observe que o diretório `internal` é a melhor maneira de garantir que seus pacotes privados não sejam importáveis porque é imposto pelo Go. O diretório `/pkg` ainda é uma boa maneira de comunicar explicitamente que o código naquele diretório é seguro para uso por outros. [`I'll take pkg over internal`](https://travisjeffery.com/b/2019/11/i-ll-take-pkg-over-internal/) A postagem no blog de Travis Jeffery fornece uma boa visão geral dos diretórios `pkg` e` internal` e quando pode fazer sentido usá-los. + +É também uma forma de agrupar o código Go em um só lugar quando o diretório raiz contém muitos componentes e diretórios não Go, tornando mais fácil executar várias ferramentas Go (conforme mencionado nestas palestras: [`Best Practices for Industrial Programming`](https://www.youtube.com/watch?v=PTE4VJIdHPg) da GopherCon EU 2018, [GopherCon 2018: Kat Zien - How Do You Structure Your Go Apps](https://www.youtube.com/watch?v=oL6JBUk6tj0) e [GoLab 2018 - Massimiliano Pippi - Project layout patterns in Go](https://www.youtube.com/watch?v=3gQa1LWwuzk)). + +Consulte o diretório [`/pkg`](pkg/README.md) se quiser ver quais repositórios Go populares usam esse padrão de layout de projeto. Este é um padrão de layout comum, mas não é universalmente aceito e alguns na comunidade Go não o recomendam. + +Não há problema em não usá-lo se o projeto do seu aplicativo for muito pequeno e onde um nível extra de aninhamento não agrega muito valor (a menos que você realmente queira :-)). Pense nisso quando estiver ficando grande o suficiente e seu diretório raiz ficar muito ocupado (especialmente se você tiver muitos componentes de aplicativos não Go). + +### `/vendor` + +Dependências de aplicativos (gerenciadas manualmente ou por sua ferramenta de gerenciamento de dependências favorita, como o novo recurso integrado [`Go Modules`](https://github.com/golang/go/wiki/Modules)).O comando `go mod vendor` criará o diretório` /vendor` para você. Note que você pode precisar adicionar a flag `-mod=vendor` ao seu comando` go build` se você não estiver usando Go 1.14 onde ele está ativado por padrão. + +Não comprometa as dependências do seu aplicativo se você estiver construindo uma biblioteca. + +Observe que desde Go [`1.13`](https://golang.org/doc/go1.13#modules) também habilitou o recurso de proxy do módulo (usando [`https://proxy.golang.org`](https://proxy.golang.org) como servidor proxy de módulo por padrão).Leia mais sobre isso [`aqui`](https://blog.golang.org/module-mirror-launch) para ver se ele se encaixa em todos os seus requisitos e restrições. Se isso acontecer, então você não precisará do diretório `vendor`. + +## Diretórios de aplicativos de serviço + +### `/api` + +Especificações OpenAPI/Swagger, arquivos de esquema JSON, arquivos de definição de protocolo. + +Veja o diretório [`/api`](api/README.md) para mais exemplos. + +## Diretórios de aplicativos da web + +### `/web` + +Componentes específicos de aplicativos da Web: ativos estáticos da Web, modelos do lado do servidor e SPAs. + +## Diretórios de aplicativos comuns + +### `/configs` + +Modelos de arquivo de configuração ou configurações padrão. + +Coloque seus arquivos de modelo `confd` ou` consul-template` aqui. + +### `/init` + +Configurações de inicialização do sistema (systemd, upstart, sysv) e gerenciador/supervisor de processos (runit, supervisord). + +### `/scripts` + +Scripts para executar várias operações de construção, instalação, análise, etc. + +Esses scripts mantêm o Makefile de nível raiz pequeno e simples (ex. [`https://github.com/hashicorp/terraform/blob/master/Makefile`](https://github.com/hashicorp/terraform/blob/master/Makefile)). + +Veja o diretório [`/scripts`](scripts/README.md) para mais exemplos. + +### `/build` + +Embalagem e integração contínua. + +Coloque suas configurações de pacote e scripts em nuvem (AMI), contêiner (Docker), sistema operacional (deb, rpm, pkg) no diretório `/build/package`. + +Coloque suas configurações e scripts de CI (travis, circle, drone) no diretório `/build/ci`. Observe que algumas das ferramentas de CI (por exemplo, Travis CI) são muito exigentes quanto à localização de seus arquivos de configuração. Tente colocar os arquivos de configuração no diretório `/build/ci` vinculando-os ao local onde as ferramentas de CI os esperam (quando possível). + +### `/deployments` + +IaaS, PaaS, configurações e modelos de implantação de orquestração de sistema e contêiner (docker-compose, kubernetes / helm, mesos, terraform, bosh). Observe que em alguns repositórios (especialmente em aplicativos implantados com kubernetes), esse diretório é denominado `/deploy`. + +### `/test` + +Aplicativos de teste externos adicionais e dados de teste. Sinta-se à vontade para estruturar o diretório `/test` da maneira que quiser. Para projetos maiores, faz sentido ter um subdiretório de dados. Por exemplo, você pode ter `/test/ data` ou` /test/testdata` se precisar que o Go ignore o que está naquele diretório. Observe que Go também irá ignorar diretórios ou arquivos que começam com "." ou "_", para que você tenha mais flexibilidade em termos de como nomear seu diretório de dados de teste. + +Veja o diretório [`/test`](test/README.md) para mais exemplos. + +## Other Directories + +### `/docs` + +Documentos do projeto e do usuário (além da documentação gerada pelo godoc). + +Veja o diretório [`/docs`](docs/README.md) para mais exemplos. + +### `/tools` + +Ferramentas de suporte para este projeto. Observe que essas ferramentas podem importar código dos diretórios `/pkg` e` /internal`. + +Veja o diretório [`/tools`](tools/README.md) para mais exemplos. + +### `/examples` + +Exemplos para seus aplicativos e / ou bibliotecas públicas. + +Veja o diretório [`/examples`](examples/README.md) para mais exemplos. + +### `/third_party` + +Ferramentas auxiliares externas, código bifurcado e outros utilitários de terceiros (por exemplo, Swagger UI). + +### `/githooks` + +Git hooks. + +### `/assets` + +Outros recursos para acompanhar seu repositório (imagens, logotipos etc). + +### `/website` + +Este é o lugar para colocar os dados do site do seu projeto se você não estiver usando as páginas do GitHub. + +Veja o diretório [`/website`](website/README.md) para mais exemplos. + +## Diretórios que você não deveria ter + +### `/src` + +Alguns projetos Go têm uma pasta `src`, mas normalmente acontece quando os devs vêm do mundo Java, onde é um padrão comum. Se você puder se ajudar, tente não adotar esse padrão Java. Você realmente não quer que seu código Go ou projetos Go se pareçam com Java :-) + +Não confunda o diretório `/src` do nível do projeto com o diretório` /src` que Go usa para seus espaços de trabalho, conforme descrito em [`How to Write Go Code`](https://golang.org/doc/code.html). A variável de ambiente `$GOPATH` aponta para sua área de trabalho(atual) (por padrão, ela aponta para` $HOME/go` em sistemas não Windows). Este espaço de trabalho inclui os diretórios de nível superior `/pkg`,` /bin` e `/src`. Seu projeto atual acaba sendo um subdiretório em `/ src`, então se você tiver o diretório` / src` em seu projeto, o caminho do projeto será parecido com este: `/algum/caminho/para/ workspace/src/your_project/src/ your_code.go`. Observe que com Go 1.11 é possível ter seu projeto fora de seu `GOPATH`, mas ainda não significa que é uma boa ideia usar este padrão de layout. + + +## Distintivos + +* [Go Report Card](https://goreportcard.com/) - Ele irá escanear seu código com `gofmt`, `go vet`, `gocyclo`, `golint`, `ineffassign`, `license` e `misspell`. Substitua `github.com/golang-standards/project-layout` com sua referência de projeto. + + [![Go Report Card](https://goreportcard.com/badge/github.com/golang-standards/project-layout?style=flat-square)](https://goreportcard.com/report/github.com/golang-standards/project-layout) + +* ~~[GoDoc](http://godoc.org) - Ele fornecerá uma versão online da documentação gerada pelo GoDoc. Mude o link para apontar para seu projeto.~~ + + [![Go Doc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](http://godoc.org/github.com/golang-standards/project-layout) + +* [Pkg.go.dev](https://pkg.go.dev) - Pkg.go.dev é um novo destino para Go discovery e docs. Você pode criar um emblema usando o [badge generation tool](https://pkg.go.dev/badge). + + [![PkgGoDev](https://pkg.go.dev/badge/github.com/golang-standards/project-layout)](https://pkg.go.dev/github.com/golang-standards/project-layout) + +* Release - Ele mostrará o número da versão mais recente do seu projeto. Altere o link do github para apontar para seu projeto. + + [![Release](https://img.shields.io/github/release/golang-standards/project-layout.svg?style=flat-square)](https://github.com/golang-standards/project-layout/releases/latest) + +## Notes + +Um modelo de projeto mais opinativo com configurações, scripts e código de amostra/reutilizáveis é um WIP. diff --git a/README_zh-CN.md b/README_zh-CN.md index faf450e..52f9eb1 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -7,6 +7,7 @@ * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) 这是Go应用程序项目的基础布局。这不是Go核心开发团队定义的官方标准;无论是在经典项目还是在新兴的项目中,这都是Go生态系统中一组常见的项目布局模式。这其中有一些模式比另外的一些更受欢迎。它通过几个支撑目录为任何足够大规模的实际应用程序提供一些增强功能。 diff --git a/README_zh-TW.md b/README_zh-TW.md index 7c8e72c..2378432 100644 --- a/README_zh-TW.md +++ b/README_zh-TW.md @@ -9,6 +9,7 @@ * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) 這是 Go 應用程式專案的基本目錄結構。它不是核心 Go 開發團隊定義的官方標準;然而,它是 Go 生態系統中一組常見的老專案和新專案的目錄結構。其中一些目錄結構比其他目錄結構更受歡迎。這個專案目錄結構還有一些細微的改進,可以支援任何大型且實用的應用程式目錄結構。 diff --git a/README_zh.md b/README_zh.md index 6128b78..a0f1bd2 100644 --- a/README_zh.md +++ b/README_zh.md @@ -9,6 +9,7 @@ * [简体中文](README_zh-CN.md) - ??? * [Français](README_fr.md) * [日本語](README_ja.md) +* [Portuguese](README_ptBR.md) * [Español](README_es.md) 这是 Go 应用程序项目的基本布局。它不是核心 Go 开发团队定义的官方标准;然而,它是 Go 生态系统中一组常见的老项目和新项目的布局模式。其中一些模式比其他模式更受欢迎。它还具有许多小的增强,以及对任何足够大的实际应用程序通用的几个支持目录。 From 5919693fe2fadd03f3b0142064adb1f9aeeb3f7d Mon Sep 17 00:00:00 2001 From: Caio Almeida Date: Sat, 20 Feb 2021 07:48:08 -0300 Subject: [PATCH 2/5] Fix spelling and coherence mistakes --- README_ptBR.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README_ptBR.md b/README_ptBR.md index c71d69f..4a5b4ac 100644 --- a/README_ptBR.md +++ b/README_ptBR.md @@ -1,4 +1,4 @@ -# Layout padrão do projetos em Go +# Layout padrão de projetos em Go Traduções: @@ -14,9 +14,9 @@ Traduções: ## Visão geral -Este é um layout básico para projetos de aplicativos Go. Não é um padrão oficial definido pela equipe principal de desenvolvimento de Go; no entanto, é um conjunto de padrões de layout de projetos históricos e emergentes comuns no ecossistema Go. Alguns desses padrões são mais populares do que outros. Ele também possui uma série de pequenos aprimoramentos junto com vários diretórios de suporte comuns a qualquer aplicativo grande o suficiente do mundo real. +Este é um layout básico para projetos de aplicações em Go. Não é um padrão oficial definido pela equipe de desenvolvimento principal do Go; no entanto, é um conjunto de padrões de layout de projetos históricos e emergentes comuns no ecossistema Go. Alguns desses padrões são mais populares do que outros. Ele também possui uma série de pequenos aprimoramentos junto com vários diretórios de suporte comuns a qualquer aplicativo grande o suficiente do mundo real. -Se você está tentando aprender Go ou se está construindo um PoC(Prova de conceito) ou um pequeno projeto pessoal para você, este layout de projeto é um exagero. Comece com algo realmente simples (um único arquivo `main.go` é mais do que suficiente). Conforme seu projeto cresce, lembre-se de que será importante garantir que seu código esteja bem estruturado, caso contrário, você acabará com um código confuso com muitas dependências ocultas e estado global. Quando você tiver mais pessoas trabalhando no projeto, precisará de ainda mais estrutura. É quando é importante apresentar uma maneira comum de gerenciar pacotes/bibliotecas. Quando você tem um projeto de código aberto ou quando conhece outros projetos, importe o código do seu repositório de projetos, é quando é importante ter pacotes e códigos privados (também conhecidos como `internal`). Clone o repositório, mantenha o que você precisa e exclua todo o resto! Só porque está lá, não significa que você precise usar tudo. Nenhum desses padrões é usado em todos os projetos. Mesmo o padrão `vendor` não é universal. +Se você está tentando aprender Go, se está construindo um PoC(Prova de conceito) ou um pequeno projeto pessoal para você, este layout de projeto é um exagero. Comece com algo realmente simples (um único arquivo `main.go` é mais do que suficiente). Conforme seu projeto cresce, lembre-se de que será importante garantir que seu código esteja bem estruturado, caso contrário, você acabará com um código confuso com muitas dependências ocultas e estados globais. Quando você tiver mais pessoas trabalhando no projeto, precisará de ainda mais estrutura. É quando é importante apresentar uma maneira comum de gerenciar pacotes/bibliotecas. Quando você tem um projeto de código aberto ou quando conhece outros projetos, importe o código do seu repositório de projetos, é quando é importante ter pacotes e códigos privados (também conhecidos como `internal`). Clone o repositório, mantenha o que você precisa e exclua todo o resto! Só porque está lá, não significa que você precise usar tudo. Nenhum desses padrões é usado em todos os projetos. Mesmo o padrão `vendor` não é universal. Com Go 1.14 [`Go Modules`](https://github.com/golang/go/wiki/Modules) estão finalmente prontos para produção. Use [`Go Modules`](https://blog.golang.org/using-go-modules) a menos que você tenha um motivo específico para não usá-los e, se tiver, não precisa se preocupar com $GOPATH e onde você colocou seu projeto. O arquivo `go.mod` básico no reposiório assume que seu projeto está hospedado no GitHub, mas não é um requisito. O caminho do módulo pode ser qualquer coisa, embora o primeiro componente do caminho do módulo deva ter um ponto em seu nome (a versão atual do Go não o impõe mais, mas se você estiver usando versões um pouco mais antigas, não se surpreenda se suas compilações falharem sem isto). Veja as issues [`37554`](https://github.com/golang/go/issues/37554) e [`32819`](https://github.com/golang/go/issues/32819) se você quiser saber mais sobre isso. @@ -48,9 +48,9 @@ Uma postagem chinesa sobre as diretrizes de design orientado a pacotes e a camad Principais aplicações para este projeto. -O nome do diretório para cada aplicativo deve corresponder ao nome do executável que você deseja ter (ex. `/cmd/myapp`). +O nome do diretório para cada aplicação deve corresponder ao nome do executável que você deseja ter (ex. `/cmd/myapp`). -Não coloque muitos códigos no diretório do aplicativo. Se você acha que o código pode ser importado e usado em outros projetos, ele deve estar no diretório `/pkg`. Se o código não for reutilizável ou se você não quiser que outros o reutilizem, coloque esse código no diretório `/internal`. Você ficará surpreso com o que os outros farão, então seja explícito sobre suas intenções! +Não coloque muitos códigos no diretório da aplicação. Se você acha que o código pode ser importado e usado em outros projetos, ele deve estar no diretório `/pkg`. Se o código não for reutilizável ou se você não quiser que outros o reutilizem, coloque esse código no diretório `/internal`. Você ficará surpreso com o que os outros farão, então seja explícito sobre suas intenções! É comum ter uma pequena função `main` que importa e invoca o código dos diretórios` /internal` e `/pkg` e nada mais. @@ -58,13 +58,13 @@ Veja o diretório [`/cmd`](cmd/README.md) para mais exemplos. ### `/internal` -Aplicativo e código de bibliotecas privado. Este é o código que você não quer que outras pessoas importem em seus aplicativos ou bibliotecas. Observe que esse padrão de layout é imposto pelo próprio compilador Go. Veja o Go 1.4 [`release notes`](https://golang.org/doc/go1.4#internalpackages) para mais detalhes. Observe que você não está limitado ao diretório `internal` de nível superior. Você pode ter mais de um diretório `internal` em qualquer nível da árvore do seu projeto. +Aplicação privada e código de bibliotecas. Este é o código que você não quer que outras pessoas importem em suas aplicações ou bibliotecas. Observe que esse padrão de layout é imposto pelo próprio compilador Go. Veja o Go 1.4 [`release notes`](https://golang.org/doc/go1.4#internalpackages) para mais detalhes. Observe que você não está limitado ao diretório `internal` de nível superior. Você pode ter mais de um diretório `internal` em qualquer nível da árvore do seu projeto. -Opcionalmente, você pode adicionar um pouco de estrutura extra aos seus pacotes internos para separar o seu código interno compartilhado e não compartilhado. Não é obrigatório (especialmente para projetos menores), mas é bom ter dicas visuais que mostram o uso pretendido do pacote. Seu atual código da aplicação pode ir para o diretório `/internal/app` (ex. `/internal/app/myapp`) e o código compartilhado por esses aplicativos no diretório `/internal/pkg` (ex. `/internal/pkg/myprivlib`). +Opcionalmente, você pode adicionar um pouco de estrutura extra aos seus pacotes internos para separar o seu código interno compartilhado e não compartilhado. Não é obrigatório (especialmente para projetos menores), mas é bom ter dicas visuais que mostram o uso pretendido do pacote. Seu atual código da aplicação pode ir para o diretório `/internal/app` (ex. `/internal/app/myapp`) e o código compartilhado por essas aplicações no diretório `/internal/pkg` (ex. `/internal/pkg/myprivlib`). ### `/pkg` -Código de biblioteca que pode ser usado por aplicativos externos (ex. `/pkg/mypubliclib`). Outros projetos irão importar essas bibliotecas esperando que funcionem, então pense duas vezes antes de colocar algo aqui :-) Observe que o diretório `internal` é a melhor maneira de garantir que seus pacotes privados não sejam importáveis porque é imposto pelo Go. O diretório `/pkg` ainda é uma boa maneira de comunicar explicitamente que o código naquele diretório é seguro para uso por outros. [`I'll take pkg over internal`](https://travisjeffery.com/b/2019/11/i-ll-take-pkg-over-internal/) A postagem no blog de Travis Jeffery fornece uma boa visão geral dos diretórios `pkg` e` internal` e quando pode fazer sentido usá-los. +Código de bibliotecas que podem ser usados por aplicativos externos (ex. `/pkg/mypubliclib`). Outros projetos irão importar essas bibliotecas esperando que funcionem, então pense duas vezes antes de colocar algo aqui :-) Observe que o diretório `internal` é a melhor maneira de garantir que seus pacotes privados não sejam importáveis porque é imposto pelo Go. O diretório `/pkg` contudo é uma boa maneira de comunicar explicitamente que o código naquele diretório é seguro para uso. [`I'll take pkg over internal`](https://travisjeffery.com/b/2019/11/i-ll-take-pkg-over-internal/) A postagem no blog de Travis Jeffery fornece uma boa visão geral dos diretórios `pkg` e` internal`, e quando pode fazer sentido usá-los. É também uma forma de agrupar o código Go em um só lugar quando o diretório raiz contém muitos componentes e diretórios não Go, tornando mais fácil executar várias ferramentas Go (conforme mencionado nestas palestras: [`Best Practices for Industrial Programming`](https://www.youtube.com/watch?v=PTE4VJIdHPg) da GopherCon EU 2018, [GopherCon 2018: Kat Zien - How Do You Structure Your Go Apps](https://www.youtube.com/watch?v=oL6JBUk6tj0) e [GoLab 2018 - Massimiliano Pippi - Project layout patterns in Go](https://www.youtube.com/watch?v=3gQa1LWwuzk)). @@ -74,11 +74,11 @@ Não há problema em não usá-lo se o projeto do seu aplicativo for muito peque ### `/vendor` -Dependências de aplicativos (gerenciadas manualmente ou por sua ferramenta de gerenciamento de dependências favorita, como o novo recurso integrado [`Go Modules`](https://github.com/golang/go/wiki/Modules)).O comando `go mod vendor` criará o diretório` /vendor` para você. Note que você pode precisar adicionar a flag `-mod=vendor` ao seu comando` go build` se você não estiver usando Go 1.14 onde ele está ativado por padrão. +Dependências de aplicativos (gerenciadas manualmente ou por sua ferramenta de gerenciamento de dependências favorita, como o novo recurso integrado [`Go Modules`](https://github.com/golang/go/wiki/Modules)). O comando `go mod vendor` criará o diretório` /vendor` para você. Note que você pode precisar adicionar a flag `-mod=vendor` ao seu comando` go build` se você não estiver usando Go 1.14 onde ele está ativado por padrão. Não comprometa as dependências do seu aplicativo se você estiver construindo uma biblioteca. -Observe que desde Go [`1.13`](https://golang.org/doc/go1.13#modules) também habilitou o recurso de proxy do módulo (usando [`https://proxy.golang.org`](https://proxy.golang.org) como servidor proxy de módulo por padrão).Leia mais sobre isso [`aqui`](https://blog.golang.org/module-mirror-launch) para ver se ele se encaixa em todos os seus requisitos e restrições. Se isso acontecer, então você não precisará do diretório `vendor`. +Observe que desde o Go [`1.13`](https://golang.org/doc/go1.13#modules) também habilitou o recurso de proxy do módulo (usando [`https://proxy.golang.org`](https://proxy.golang.org) como servidor proxy de módulo por padrão). Leia mais sobre isso [`aqui`](https://blog.golang.org/module-mirror-launch) para ver se ele se encaixa em todos os seus requisitos e restrições. Se isso acontecer, então você não precisará do diretório `vendor`. ## Diretórios de aplicativos de serviço @@ -116,7 +116,7 @@ Veja o diretório [`/scripts`](scripts/README.md) para mais exemplos. ### `/build` -Embalagem e integração contínua. +Empacotamento e integração contínua. Coloque suas configurações de pacote e scripts em nuvem (AMI), contêiner (Docker), sistema operacional (deb, rpm, pkg) no diretório `/build/package`. @@ -128,11 +128,11 @@ IaaS, PaaS, configurações e modelos de implantação de orquestração de sist ### `/test` -Aplicativos de teste externos adicionais e dados de teste. Sinta-se à vontade para estruturar o diretório `/test` da maneira que quiser. Para projetos maiores, faz sentido ter um subdiretório de dados. Por exemplo, você pode ter `/test/ data` ou` /test/testdata` se precisar que o Go ignore o que está naquele diretório. Observe que Go também irá ignorar diretórios ou arquivos que começam com "." ou "_", para que você tenha mais flexibilidade em termos de como nomear seu diretório de dados de teste. +Aplicações de testes externos adicionais e dados de teste. Sinta-se à vontade para estruturar o diretório `/test` da maneira que quiser. Para projetos maiores, faz sentido ter um subdiretório de dados. Por exemplo, você pode ter `/test/data` ou` /test/testdata` se precisar que o Go ignore o que está naquele diretório. Observe que o Go também irá ignorar diretórios ou arquivos que começam com "." ou "_", para que você tenha mais flexibilidade em termos de como nomear seu diretório de dados de teste. Veja o diretório [`/test`](test/README.md) para mais exemplos. -## Other Directories +## Outros diretórios ### `/docs` @@ -176,7 +176,7 @@ Veja o diretório [`/website`](website/README.md) para mais exemplos. Alguns projetos Go têm uma pasta `src`, mas normalmente acontece quando os devs vêm do mundo Java, onde é um padrão comum. Se você puder se ajudar, tente não adotar esse padrão Java. Você realmente não quer que seu código Go ou projetos Go se pareçam com Java :-) -Não confunda o diretório `/src` do nível do projeto com o diretório` /src` que Go usa para seus espaços de trabalho, conforme descrito em [`How to Write Go Code`](https://golang.org/doc/code.html). A variável de ambiente `$GOPATH` aponta para sua área de trabalho(atual) (por padrão, ela aponta para` $HOME/go` em sistemas não Windows). Este espaço de trabalho inclui os diretórios de nível superior `/pkg`,` /bin` e `/src`. Seu projeto atual acaba sendo um subdiretório em `/ src`, então se você tiver o diretório` / src` em seu projeto, o caminho do projeto será parecido com este: `/algum/caminho/para/ workspace/src/your_project/src/ your_code.go`. Observe que com Go 1.11 é possível ter seu projeto fora de seu `GOPATH`, mas ainda não significa que é uma boa ideia usar este padrão de layout. +Não confunda o diretório `/src` do nível do projeto com o diretório` /src` que Go usa para seus espaços de trabalho, conforme descrito em [`How to Write Go Code`](https://golang.org/doc/code.html). A variável de ambiente `$GOPATH` aponta para sua área de trabalho(atual) (por padrão, ela aponta para` $HOME/go` em sistemas não Windows). Este espaço de trabalho inclui os diretórios de nível superior `/pkg`,` /bin` e `/src`. Seu projeto atual acaba sendo um subdiretório em `/ src`, então se você tiver o diretório` /src` em seu projeto, o caminho do projeto será parecido com este: `/algum/caminho/para/workspace/src/your_project/src/ your_code.go`. Observe que com Go 1.11 é possível ter seu projeto fora de seu `GOPATH`, mas ainda não significa que é uma boa ideia usar este padrão de layout. ## Distintivos @@ -197,6 +197,6 @@ Não confunda o diretório `/src` do nível do projeto com o diretório` /src` q [![Release](https://img.shields.io/github/release/golang-standards/project-layout.svg?style=flat-square)](https://github.com/golang-standards/project-layout/releases/latest) -## Notes +## Notas Um modelo de projeto mais opinativo com configurações, scripts e código de amostra/reutilizáveis é um WIP. From 57126c3d4c315bc996fededd0caa18e14324aef7 Mon Sep 17 00:00:00 2001 From: yi_t Date: Wed, 3 Mar 2021 10:52:42 +0800 Subject: [PATCH 3/5] There are two typos in the document.fix typos --- README_zh-CN.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README_zh-CN.md b/README_zh-CN.md index faf450e..cef20fa 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -58,7 +58,7 @@ Go 1.14 `Go Modules`已经可以用于生产环境。没有什么特殊原因的 ### `/pkg` -外部应用程序可以使用的库代码(如,`/pkg/mypubliclib`)。其他项目将会导入这些库来保证项目可以正常运行,所以在将代码放在这里前,一定要三四而行。请注意,`internal`目录是一个更好的选择来确保项目私有代码不会被其他人导入,因为这是Go强制执行的。使用`/pkg`目录来明确表示代码可以被其他人安全的导入仍然是一个好方式。Travis Jeffery撰写的关于 [I’ll take pkg over internal](https://travisjeffery.com/b/2019/11/i-ll-take-pkg-over-internal/) 文章很好地概述了`pkg`和`inernal`目录以及何时使用它们。 +外部应用程序可以使用的库代码(如,`/pkg/mypubliclib`)。其他项目将会导入这些库来保证项目可以正常运行,所以在将代码放在这里前,一定要三思而行。请注意,`internal`目录是一个更好的选择来确保项目私有代码不会被其他人导入,因为这是Go强制执行的。使用`/pkg`目录来明确表示代码可以被其他人安全的导入仍然是一个好方式。Travis Jeffery撰写的关于 [I’ll take pkg over internal](https://travisjeffery.com/b/2019/11/i-ll-take-pkg-over-internal/) 文章很好地概述了`pkg`和`inernal`目录以及何时使用它们。 当您的根目录包含大量非Go组件和目录时,这也是一种将Go代码分组到一个位置的方法,从而使运行各种Go工具更加容易(在如下的文章中都有提到:2018年GopherCon [Best Practices for Industrial Programming](https://www.youtube.com/watch?v=PTE4VJIdHPg),[Kat Zien - How Do You Structure Your Go Apps](https://www.youtube.com/watch?v=oL6JBUk6tj0) ,Golab 2018 [Massimiliano Pippi - Project layout patterns in Go](https://www.youtube.com/watch?v=3gQa1LWwuzk))。 @@ -168,7 +168,7 @@ Git的钩子。 ### `/src` -有一些Go项目确实包含`src`文件夹,但通常只有在开发者是从Java(这是Java中一个通用的模式)转过来的情况下才会有。如果可以的话请不要使用这种Java模式。你肯定不希望你的Go代码和项目看起来向Java。 +有一些Go项目确实包含`src`文件夹,但通常只有在开发者是从Java(这是Java中一个通用的模式)转过来的情况下才会有。如果可以的话请不要使用这种Java模式。你肯定不希望你的Go代码和项目看起来像Java。 不要将项目级别的`/src`目录与Go用于其工作空间的`/src`目录混淆,就像[How to Write Go Code](https://golang.org/doc/code.html)中描述的那样。`$GOPATH`环境变量指向当前的工作空间(默认情况下指向非Windows系统中的`$HOME/go`)。此工作空间包括顶级`/pkg`,`/bin`和`/src`目录。实际的项目最终变成`/src`下的子目录,因此,如果项目中有`/src`目录,则项目路径将会变成:`/some/path/to/workspace/src/your_project/ src/your_code.go`。请注意,使用Go 1.11,可以将项目放在GOPATH之外,但这并不意味着使用此布局模式是个好主意。 From f5fe5e9d8d9132e71619808de2df74251a191250 Mon Sep 17 00:00:00 2001 From: Akiomi Kamakura Date: Tue, 9 Mar 2021 12:13:41 +0900 Subject: [PATCH 4/5] Fix markdown formatting --- README_ja.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README_ja.md b/README_ja.md index 0bdb595..b46cfd7 100644 --- a/README_ja.md +++ b/README_ja.md @@ -65,7 +65,7 @@ Go 1.14では、[`Go Modules`](https://github.com/golang/go/wiki/Modules)がつ 外部アプリケーションで使用しても問題ないライブラリコード(例: `/pkg/mypubliclib`)。他のプロジェクトは、これらのライブラリが動作することを期待してインポートしますので、ここに何かを置く前によく考えてください :-)。内部ディレクトリは、プライベートパッケージがインポートできないようにするためのより良い方法であることに注意してください。`/pkg` ディレクトリは、そのディレクトリにあるコードが他の人に使われても安全であることを明示的に伝える良い方法です。[`I'll take pkg over internal blog post by Travis Jeffery`](https://travisjeffery.com/b/2019/11/i-ll-take-pkg-over-internal/) は、`pkg` ディレクトリと内部ディレクトリの概要と、それらを使用することが意味のある場合の概要を提供しています。 -また、ルートディレクトリにGo以外のコンポーネントやディレクトリが多数含まれている場合は、Goコードを1つの場所にグループ化して、さまざまなGoツールを簡単に実行できるようにする方法でもあります(これらの講演で言及されているように:[`産業用プログラミングのベストプラクティス`](https ://www.youtube.com/watch?v = PTE4VJIdHPg) from GopherCon EU 2018、[`GopherCon 2018:Kat Zien-How Do You Structure Your Go Apps`](https://www.youtube.com/watch?v= oL6JBUk6tj0) および [`GoLab 2018-Massimiliano Pippi-Goのプロジェクトレイアウトパターン`](https://www.youtube.com/watch?v=3gQa1LWwuzk))。 +また、ルートディレクトリにGo以外のコンポーネントやディレクトリが多数含まれている場合は、Goコードを1つの場所にグループ化して、さまざまなGoツールを簡単に実行できるようにする方法でもあります(これらの講演で言及されているように:[`産業用プログラミングのベストプラクティス`](https://www.youtube.com/watch?v=PTE4VJIdHPg) from GopherCon EU 2018、[`GopherCon 2018:Kat Zien-How Do You Structure Your Go Apps`](https://www.youtube.com/watch?v=oL6JBUk6tj0) および [`GoLab 2018-Massimiliano Pippi-Goのプロジェクトレイアウトパターン`](https://www.youtube.com/watch?v=3gQa1LWwuzk))。 このプロジェクトレイアウトパターンを使用している人気のある Go repos を見たい場合は [`/pkg`](pkg/README.md) ディレクトリを参照してください。これは一般的なレイアウトパターンですが、普遍的に受け入れられているわけではありませんし、Goコミュニティの中には推奨していない人もいます。 @@ -138,19 +138,19 @@ IaaS、PaaS、システム、コンテナオーケストレーションのデプ デザインドキュメントとユーザードキュメント (godocで生成されたドキュメントに加えて)。 -例に関しては、['/docs`](docs/README.md)ディレクトリを参照してください。 +例に関しては、[`/docs`](docs/README.md)ディレクトリを参照してください。 ### `/tools` このプロジェクトをサポートするツールです。これらのツールは `/pkg` と `/internal` ディレクトリからコードをインポートできることに注意してください。 -例に関しては、['/tools`](tools/README.md)ディレクトリを参照してください。 +例に関しては、[`/tools`](tools/README.md)ディレクトリを参照してください。 ### `/examples` あなたのアプリケーション、またはpublic librariesのための例。 -例に関しては、['/examples`](examples/README.md)ディレクトリを参照してください。 +例に関しては、[`/examples`](examples/README.md)ディレクトリを参照してください。 ### `/third_party` @@ -168,7 +168,7 @@ Gitフック。 Githubページを使用していない場合は、プロジェクトのWebサイトのデータを置く場所です。 -例に関しては、['/website`](website/README.md)ディレクトリを参照してください。 +例に関しては、[`/website`](website/README.md)ディレクトリを参照してください。 ## 作成してはいけないディレクトリ From 34bdbafba78b4b8ed19d6fa08d43eb8b3470ee39 Mon Sep 17 00:00:00 2001 From: Kyle Quest Date: Wed, 17 Mar 2021 22:16:02 -0700 Subject: [PATCH 5/5] more pkg examples --- pkg/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/README.md b/pkg/README.md index 40752fc..de41157 100644 --- a/pkg/README.md +++ b/pkg/README.md @@ -52,3 +52,5 @@ Examples: * https://github.com/weaveworks/ignite/tree/master/pkg * https://github.com/tmrts/boilr/tree/master/pkg * https://github.com/kata-containers/runtime/tree/master/pkg +* https://github.com/okteto/okteto/tree/master/pkg +* https://github.com/solo-io/squash/tree/master/pkg