From 30a5035ce9fba0e69103d7fe596f81c2e9fe6885 Mon Sep 17 00:00:00 2001 From: Danny Ra Date: Wed, 13 Nov 2024 10:50:36 +0330 Subject: [PATCH] Update 4.26-Standard-Go-Project-Layout.md --- .../4.26-Standard-Go-Project-Layout.md | 23 ++++--------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/content/chapter 4/4.26-Standard-Go-Project-Layout.md b/content/chapter 4/4.26-Standard-Go-Project-Layout.md index ff1722613..5c4acb57f 100644 --- a/content/chapter 4/4.26-Standard-Go-Project-Layout.md +++ b/content/chapter 4/4.26-Standard-Go-Project-Layout.md @@ -13,26 +13,20 @@ weight: 9030 این یک تلاش مشترک است. اگر الگوی جدیدی مشاهده کردید یا فکر می‌کنید یکی از الگوهای موجود نیاز به به‌روزرسانی دارد، یک issue را باز کنید. اگر به کمک در مورد نام‌گذاری، قالب‌بندی و style نیاز دارید، ابتدا [`gofmt`](https://golang.org/cmd/gofmt/) و [`staticcheck`](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) را اجرا کنید. linter استاندارد قبلی، golint، اکنون منسوخ شده است و نگهداری نمی‌شود؛ استفاده از یک linter در حال توسعه و نگهداری شده مانند staticcheck توصیه می‌شود. همچنین مطمئن شوید که این دستورالعمل‌ها و توصیه‌های Go code style را بخوانید: - - - [https://talks.golang.org/2014/names.slide](https://talks.golang.org/2014/names.slide) - [https://golang.org/doc/effective_go.html#names](https://golang.org/doc/effective_go.html#names) - [https://blog.golang.org/package-names](https://blog.golang.org/package-names) - [https://go.dev/wiki/CodeReviewComments](https://go.dev/wiki/CodeReviewComments) - [Style guideline for Go packages](https://rakyll.org/style-packages) (rakyll/JBD) - برای اطلاعات بیشتر ، [`Go Project Layout`](https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2) را ببینید. اطلاعات بیشتر در مورد نامگذاری و سازماندهی بسته‌ها و همچنین سایر توصیه‌های ساختار کد: -- [GopherCon EU 2018: Peter Bourgon - Best Practices for Industrial Programming](https://www.youtube.com/watch?v=PTE4VJIdHPg) +- [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 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) ## 4.25.2 دایرکتوری‌ها در Go - - #### /cmd - این دایرکتوری شامل برنامه‌های اصلی پروژه شما است. نام هر دایرکتوری فرعی باید با نام برنامه اجرایی مطابقت داشته باشد (برای مثال، `/cmd/myapp`). از قرار دادن حجم کد زیاد در دایرکتوری برنامه خودداری کنید. اگر فکر می‌کنید این کد‌ها قابلیت وارد شدن و استفاده در پروژه‌های دیگر را دارد، باید در دایرکتوری `/pkg` قرار گیرد. اگر کد قابل استفاده مجدد نیست یا نمی‌خواهید دیگران از آن استفاده مجدد کنند، آن کد را در دایرکتوری `/internal` قرار دهید. تعجب خواهید کرد که دیگران چه کارهایی انجام می‌دهند، بنابراین در مورد اهداف خود صریح باشید! معمولاً یک تابع اصلی کوچک وجود دارد که کد را از دایرکتوری‌های `/internal `و `/pkg `وارد کرده و فراخوانی می‌کند و کار دیگری انجام نمی‌دهد. @@ -52,32 +46,24 @@ weight: 9030 وابستگی‌های برنامه (به‌صورت دستی یا توسط ابزار مدیریت وابستگی مورد علاقه شما مانند ویژگی جدید [`Go Modules`](https://go.dev/wiki/Modules)داخلی مدیریت می‌شود). دستور `go mod vendor` دایرکتوری `vendor/` را برای شما ایجاد می‌کند. توجه داشته باشید که اگر از Go 1.14 استفاده نمی‌کنید که به صورت پیش‌فرض فعال است، ممکن است نیاز به اضافه کردن پرچم `-mod=vendor` به دستور go build خود داشته باشید. اگر در حال ساخت کتابخانه هستید، وابستگی‌های برنامه خود را commit نکنید. توجه داشته باشید که از Go [`1.13`](https://golang.org/doc/go1.13#modules) ، قابلیت module proxy نیز در Go فعال شد (که به طور پیش‌فرض از [https://proxy.golang.org](https://proxy.golang.org/) به عنوان سرور پراکسی ماژول خود استفاده می‌کند). برای اینکه ببینید آیا این قابلیت با تمام الزامات و محدودیت‌های شما مطابقت دارد، در [اینجا](https://blog.golang.org/module-mirror-launch) بیشتر در مورد آن بخوانید. اگر اینطور باشد، اصلاً به دایرکتوری `vendor` نیاز نخواهید داشت. - ### 4.26.3 دایرکتوری‌های سرویس application ### `/api` مشخصات OpenAPI/Swagger، فایل‌های JSON schema، فایل‌های تعریف پروتکل. برای مثال به دایرکتوری [`/api/`](https://github.com/golang-standards/project-layout/blob/master/api/README.md) مراجعه کنید. - ### 4.26.4 دایرکتوری‌های سرویس وب اجزای خاص برنامه وب: static web assets و templateهای سمت سرور و SPAها. ### 4.26.5 دایرکتوری‌های مشترک در application - ### `/configs` - قالب‌های فایل پیکربندی یا تنظیمات پیش‌فرض. فایل‌های قالب `confd` یا `consul-template` خود را اینجا قرار دهید. - ### `/init` پیکربندی‌های init سیستم (systemd، upstart، sysv) و process manager/supervisor (runit, supervisord). - ### `/scripts` - اسکریپت‌هایی برای انجام عملیات‌های مختلف build, install, analysis و غیره. این اسکریپت‌ها Makefile سطح ریشه را کوچک و ساده نگه می‌دارند (به عنوان مثال،[`https://github.com/hashicorp/terraform/blob/main/Makefile`](https://github.com/hashicorp/terraform/blob/main/Makefile)). برای مثال به دایرکتوری [`scripts/`](https://github.com/golang-standards/project-layout/blob/master/scripts/README.md) مراجعه کنید. - ### `/build` -‏Packaging و Continuous Integration +‏برای Packaging و Continuous Integration - پیکربندی‌ها و اسکریپت‌های package‌های ابری (AMI)، کانتینری (Docker)، سیستم‌عامل (deb، rpm، pkg) را در این دایرکتوری قرار دهید. ### `/build` - پیکربندی‌ها و اسکریپت‌های CI (travis، circle، drone) را در این دایرکتوری قرار دهید. توجه داشته باشید که برخی از ابزارهای CI (مانند Travis CI) در مورد مکان فایل‌های پیکربندی خود بسیار حساس هستند. سعی کنید فایل‌های پیکربندی را در دایرکتوری `/build/ci` قرار داده و آن‌ها را به مکانی که ابزارهای CI انتظار دارند (در صورت امکان) لینک کنید. @@ -86,7 +72,6 @@ weight: 9030 ### `/test` - **برنامه‌های تست خارجی اضافی و داده‌های تست**. می‌توانید دایرکتوری `test/` را به هر شکلی که می‌خواهید ساختار دهید. برای پروژه‌های بزرگ‌تر، داشتن یک زیردایرکتوری data منطقی است. برای مثال، می‌توانید `test/testdata/` یا `test/data/` را داشته باشید اگر نیاز دارید که Go آنچه در آن دایرکتوری است را نادیده بگیرد. توجه داشته باشید که Go همچنین دایرکتوری‌ها یا فایل‌هایی که با "." یا "" شروع می‌شوند را نادیده می‌گیرد، بنابراین در نحوه نام‌گذاری دایرکتوری داده‌های تست خود انعطاف بیشتری دارید. برای نمونه‌ها به دایرکتوری [`test/`](https://github.com/golang-standards/project-layout/blob/master/test/README.md)مراجعه کنید. - ## دایرکتوری‌های دیگر اسناد طراحی و کاربر (علاوه بر مستندات ایجاد شده توسط godoc شما). برای مثال به دایرکتوری [`docs/`](https://github.com/golang-standards/project-layout/blob/master/docs/README.md) مراجعه کنید. @@ -99,7 +84,7 @@ weight: 9030 ### `/third_party` ابزارهای کمکی خارجی، کد fork شده و سایر ابزارهای شخص ثالث (مانند Swagger UI). ### `/githooks` -Git hooks. +برای Git hooks. ### `/assets` سایر assetها برای همراهی با repository شما (image, logoها و غیره). ### `/website`