Gopher Academy
3.34K subscribers
920 photos
40 videos
280 files
2.01K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔔 100خطای رایج در کوبر به همراه راه حل


𝑓𝑜𝑟 𝑚𝑜𝑟𝑒 𝑖𝑛𝑓𝑜, 𝑦𝑜𝑢 𝑐𝑎𝑛 𝑐ℎ𝑒𝑐𝑘 𝑡ℎ𝑖𝑠 𝑙𝑖𝑛𝑘:

https://prodevopsguy.site/100-Kubernetes-Errors-With-Solution

#DevOps #Cloud #Kubernetes #Troubleshooting


👑 @gopher_academy | 💸 Donate | 💋 Boost
🔥6🍾1💋1
یک توسعه‌دهنده خوب قابل جایگزینی است.

- you don’t need them to explain their code.
- their code can be easily modified.
- their work is documented.
- their code is validated with good tests.

یک توسعه‌دهنده بد غیرقابل جایگزینی است.

- only they can understand their code.
- you can’t change their code in fear of breaking something random somewhere else.
- the documentation is in their head.
- they don’t bother to write tests.

A good dev leaves, you should be fine.
A bad dev leaves, you’re in trouble.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍10💯2🍓2🍾1💊1
✍️اگر به devops علاقه داری یه سری نمونه سوال مصاحبه ای اینجاست

🖥 https://blog.prodevopsguy.xyz/top-100-devops-interview-questions-and-answers


👑 @gopher_academy | 💸 Donate | 💋 Boost
🍾3🕊2💋1💅1
🎯نه دلیل اصلی استفاده ۱۰۰٪ از CPU
۱. حلقه‌های بی‌پایان:
کدهایی که بدون توقف در حال اجرا هستند و هیچ وقفه‌ای نمی‌دهند، می‌توانند موجب استفاده ۱۰۰٪ از CPU شوند.

۲. پردازش‌های سنگین محاسباتی:
الگوریتم‌ها و پردازش‌هایی که نیاز به محاسبات پیچیده و سنگین دارند، می‌توانند تمام توان CPU را مصرف کنند.

۳. نشت حافظه:
برنامه‌هایی که به درستی حافظه را آزاد نمی‌کنند، می‌توانند باعث افزایش بی‌رویه مصرف حافظه و در نتیجه بارگذاری CPU شوند.

۴. اختلال در I/O:
انتظار طولانی برای ورودی/خروجی‌ها می‌تواند موجب شود که فرآیندها CPU را در حالت انتظار نگه دارند و به تدریج تمام منابع را مصرف کنند.

۵. کد بهینه‌نشده:
کدهایی که بهینه‌سازی نشده‌اند و عملیات غیرضروری زیادی انجام می‌دهند، می‌توانند باعث استفاده بالا از CPU شوند.

۶. پردازش‌های پس‌زمینه زیاد:
اجرای همزمان تعداد زیادی از پردازش‌های پس‌زمینه می‌تواند به‌طور قابل توجهی بار CPU را افزایش دهد.

۷. بدافزارها و ویروس‌ها:
بدافزارها می‌توانند برنامه‌های پنهانی را اجرا کرده و از منابع CPU استفاده کنند.

۸. به‌روزرسانی‌های نرم‌افزاری:
برخی از به‌روزرسانی‌های نرم‌افزاری ممکن است به‌طور موقت باعث استفاده بالای CPU شوند.

۹. درایورهای مشکل‌دار:
درایورها یا سخت‌افزارهای ناسازگار یا مشکل‌دار می‌توانند باعث افزایش غیرمنتظره استفاده از CPU شوند.

👑 @gopher_academy | 💸 Donate | 💋 Boost
👍5🔥1🍾1💋1
برای بهبود کیفیت ترجمه از انگلیسی به فارسی با استفاده از مدل‌های GPT-4، می‌توانید از پرامپت‌هایی استفاده کنید که به وضوح هدف و زمینه ترجمه را مشخص کنند. این کار به مدل کمک می‌کند تا دقیق‌تر و متناسب‌تر ترجمه کند. در زیر چند مثال از پرامپت‌های مناسب برای ترجمه ارائه شده است:

### مثال‌های پرامپت

1. ترجمه ساده:

Translate the following text from English to Persian:
"Hello, how are you?"


2. ترجمه با توضیحات اضافی:

Please translate the following text from English to Persian. Make sure the translation is accurate and maintains the original meaning:
"Hello, how are you?"


3. ترجمه متنی با زمینه خاص:

Translate the following business email from English to Persian, ensuring the tone remains professional and polite:
"Dear Mr. Smith, I hope this email finds you well. I am writing to inquire about the status of our project proposal."


4. ترجمه با تاکید بر حفظ سبک ادبی:

Translate the following literary text from English to Persian, keeping the poetic and literary style intact:
"The sun sets over the tranquil sea, casting hues of gold and crimson across the sky."


5. ترجمه همراه با راهنمایی‌های اضافی:

Translate the following technical document from English to Persian, ensuring that technical terms are accurately translated:
"The system architecture consists of several interconnected modules that communicate via APIs."


### استفاده از پرامپت‌ها در کد
شما می‌توانید این پرامپت‌ها را به صورت مستقیم در کد خود استفاده کنید. مثال زیر نشان می‌دهد که چگونه این کار را انجام دهید:

package main

import (
"context"
"fmt"
"log"

"github.com/sashabaranov/go-openai" // اطمینان حاصل کنید که این کتابخانه را نصب کرده‌اید
)

type ChatGPT struct {
ApiKey string
Model string
}

func NewChatGPT(api string, model string) *ChatGPT {
return &ChatGPT{
ApiKey: api,
Model: model,
}
}

func (c *ChatGPT) Trans(ctx context.Context, prompt string) {
client := openai.NewClient(c.ApiKey)

resp, err := client.CreateChatCompletion(ctx, openai.ChatCompletionRequest{
Model: c.Model,
Messages: []openai.ChatCompletionMessage{
{
Role: "user",
Content: prompt,
},
},
})

if err != nil {
log.Fatalf("Failed to get response from ChatGPT: %v", err)
}

// نمایش ترجمه به فارسی
fmt.Println("Translated Text:", resp.Choices[0].Message.Content)
}

func main() {
apiKey := "your-openai-api-key"
model := "gpt-4-turbo" // یا "gpt-4" یا هر مدل دیگری

chatGPT := NewChatGPT(apiKey, model)
ctx := context.Background()

// استفاده از یک پرامپت مناسب برای ترجمه
prompt := `Translate the following text from English to Persian, keeping the poetic and literary style intact:
"The sun sets over the tranquil sea, casting hues of gold and crimson across the sky."`

chatGPT.Trans(ctx, prompt)
}


در این کد، پرامپت مورد استفاده شامل توضیحاتی برای حفظ سبک ادبی متن است. با استفاده از پرامپت‌های مختلف و تنظیمات مناسب، می‌توانید کیفیت ترجمه را بهبود بخشید.

👑 @gopher_academy | 💸 Donate | 💋 Boost
👍61🔥1🕊1💋1
✍️نتورک ها در کوبر


🔴 Pod Networking:
- Pods share the same network namespace and can communicate via localhost.
- Kubernetes assigns each Pod a unique IP address for inter-node communication.

🔴 Service Networking:
- Services provide stable endpoints for accessing Pods.
- ClusterIP, NodePort, and LoadBalancer are common Service types for internal and external access.

🔴 Ingress Networking:
- Ingress manages external access to Services based on HTTP/HTTPS rules.
- Ingress controllers handle traffic routing to Services within the cluster.

🔴 Network Policies:
- This defines rules for Pod-to-Pod communication and access to external resources.
- It enables fine-grained control over network traffic within the cluster.

🔴 Container Network Interface (CNI):
- A standard for defining plugins that handle networking in container runtimes.
- Used by Kubernetes to manage network interfaces and IP addresses.

🔴 Networking Plugins:
- Kube-Proxy manages network rules for routing traffic to Services.
- CoreDNS resolves DNS queries for Kubernetes Services and Pods.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍2🍾21
✍️Rouzbeh SabzeheiRouzbeh Sabzehei


🌷فرق Cache Aware و Cache Oblivious چیه ؟

نوشتن نرم افزاری که نیاز داره مرزهای Performance رو رد کنه حتما باید با دید سخت افزاری نوشته بشه. یکی از این این موارد استفاده بهینه از CPU Cache هست. دلیلش اینه که سرعت خواندن دیتا از لایه های Cache به مراتب سریعتر از RAM هستش.

الگوریتم های Cache Aware به الگوریتم هایی گفته میشه که به طور خاص با آگاهی از مقدار Cache Size پردازنده ای که قراره روی اون اجرا بشه نوشته میشه. یکی از چالشا تو این نوع الگوریتم ها اینه که برای هر مدل پردازنده و بر اساس مقدار Cache Size اون پردازنده اون الگوریتم دوباره باید نوشته بشه. تو این نوع الگوریتم ها میشه به بهینه ترین نوع استفاده از Cache سیستم رسید.

در مقابل الگوریتم های Cache Oblivious نیاز ندارن تا براساس مقدار دقیق Cache Size نوشته بشن و میتونن با استفاده از پترن هایی مثل Recursive الگوریتم رو به دیتا های کوچکتری که در اکثر Cache Size ها جا میشن تقسیم کنن تا تقریبا بر روی هر پردازنده ای خوب و سریع عمل کنند.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍5🔥2💋2🍾1💅1
Junior engineer: Writes code

Mid-level engineer: Reviews code

Senior engineer: Deletes code

Staff engineer: Doesn't interact with the code at all but somehow has more impact than the junior, mid-level, and senior engineers combined


👑 @gopher_academy | 💸 Donate | 💋 Boost
🔥9🎃4🍓3🏆1🍾1💅1💊1
🚬 how we retry on failures

🔹 Linear Backoff
Linear backoff involves waiting for a progressively increasing fixed interval between retry attempts.

Advantages: Simple to implement and understand.

Disadvantages: May not be ideal under high load or in high-concurrency environments as it could lead to resource contention or "retry storms".

🔹 Linear Jitter Backoff
Linear jitter backoff modifies the linear backoff strategy by introducing randomness to the retry intervals. This strategy still increases the delay linearly but adds a random "jitter" to each interval.

Advantages: The randomness helps spread out the retry attempts over time, reducing the chance of synchronized retries across instances.

Disadvantages: Although better than simple linear backoff, this strategy might still lead to potential issues with synchronized retries as the base interval increases only linearly.

🔹 Exponential Backoff
Exponential backoff involves increasing the delay between retries exponentially. The interval might start at 1 second, then increase to 2 seconds, 4 seconds, 8 seconds, and so on, typically up to a maximum delay. This approach is more aggressive in spacing out retries than linear backoff.

Advantages: Significantly reduces the load on the system and the likelihood of collision or overlap in retry attempts, making it suitable for high-load environments.

Disadvantages: In situations where a quick retry might resolve the issue, this approach can unnecessarily delay the resolution.

🔹 Exponential Jitter Backoff
Exponential jitter backoff combines exponential backoff with randomness. After each retry, the backoff interval is exponentially increased, and then a random jitter is applied. The jitter can be either additive (adding a random amount to the exponential delay) or multiplicative (multiplying the exponential delay by a random factor).


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍41💋1
✍️ Massimo Dev

Image preview
توی #گیت دستور git stash چی می‌کنه؟

دستور git stash دستوری در گیت است که تغییراتی که در دایرکتوری کاریت انجام دادی رو به‌طور موقت کنار میذاره (یا "ذخیره" می کنه) تا بتونی بدون نیاز به کامیت کردن این تغییرات، به برنچ دیگه‌ای بری یا روی کار دیگه‌ای تمرکز کنی. وقتی آماده بودی دوباره روی تغییرات کار کنی، می‌تونی اونارو با استفاده از git stash apply یا git stash pop دوباره اعمال کنی.

یک مثال ساده:

1. تغییراتی در دایرکتوری کاریت داری:


$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file1.txt
modified: file2.txt


2. این تغییرات رو stash می‌کنی:


$ git stash
Saved working directory and index state WIP on master: 1234567 Update file1 and file2


3. حالا دایرکتوری کاریت تمیزه:


$ git status
On branch master
nothing to commit, working tree clean


4. می‌تونی به برنچ دیگه‌ای بری یا کار دیگه‌ای انجام بدی. بعداً، وقتی خواستی دوباره تغییرات رو اعمال کنی، می‌تونی از این دستور استفاده کنی:


$ git stash apply

یا برای اعمال تغییرات و حذف اونا از لیست stash:


$ git stash pop

5. تغییرات دوباره به دایرکتوری کاریت اعمال میشن:


$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file1.txt
modified: file2.txt


به‌طور خلاصه، git stash یک روش مفید برای ذخیره موقت کارهاست بدون نیاز به کامیت کردن، که بهت اجازه میده به‌راحتی کارهات رو تغییر بدی.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍11🕊1🍾1
😳 api pagination 101

🔹 Offset-based Pagination:
This technique uses an offset and a limit parameter to define the starting point and the number of records to return.
- Example: GET /orders?offset=0&limit=3
- Pros: Simple to implement and understand.
- Cons: Can become inefficient for large offsets, as it requires scanning and skipping rows.

🔹 Cursor-based Pagination:
This technique uses a cursor (a unique identifier) to mark the position in the dataset. Typically, the cursor is an encoded string that points to a specific record.
- Example: GET /orders?cursor=xxx
- Pros: More efficient for large datasets, as it doesn't require scanning skipped records.
- Cons: Slightly more complex to implement and understand.

🔹 Page-based Pagination:
This technique specifies the page number and the size of each page.
- Example: GET /items?page=2&size=3
- Pros: Easy to implement and use.
- Cons: Similar performance issues as offset-based pagination for large page numbers.

🔹 Keyset-based Pagination:
This technique uses a key to filter the dataset, often the primary key or another indexed column.
- Example: GET /items?after_id=102&limit=3
- Pros: Efficient for large datasets and avoids performance issues with large offsets.
- Cons: Requires a unique and indexed key, and can be complex to implement.

🔹 Time-based Pagination:
This technique uses a timestamp or date to paginate through records.
- Example: GET /items?start_time=xxx&end_time=yyy
- Pros: Useful for datasets ordered by time, ensures no records are missed if new ones are added.
- Cons: Requires a reliable and consistent timestamp.

🔹 Hybrid Pagination:
This technique combines multiple pagination techniques to leverage their strengths.
Example: Combining cursor and time-based pagination for efficient scrolling through time-ordered records.
- Example: GET /items?cursor=abc&start_time=xxx&end_time=yyy
- Pros: Can offer the best performance and flexibility for complex datasets.
- Cons: More complex to implement and requires careful design.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍5
🍾 BIOS Infection

‏BIOS Infection یکی از تکنیک‌های پیشرفته و خطرناک در حوزه بدافزارهاست که هدفش آلوده کردن فریمور سیستم، به‌ویژه BIOS یا UEFI کامپیوترها هستش. این نوع حمله به هکرها اجازه می‌ده تا کنترل کاملی روی سیستم قربانی به دست بیارن و حتی بعد از فرمت کردن هارد دیسک یا تعویض اون، همچنان در سیستم باقی بمونن.

مکانیزم کار BIOS Infection به این صورته که مهاجم با استفاده از آسیب‌پذیری‌های موجود در BIOS/UEFI یا از طریق دسترسی فیزیکی به سیستم، کد مخرب خودش رو مستقیماً به فریمور تزریق می‌کنه. این کد معمولاً در بخش‌هایی از حافظه فلش BIOS ذخیره می‌شه که کمتر مورد استفاده قرار می‌گیرن یا در قسمت‌هایی که برای کاستومایز کردن BIOS در نظر گرفته شدن.

یکی از معروف‌ترین نمونه‌های BIOS Infection، بدافزار EquationDrug هستش که توسط گروه Equation Group ساخته شده و قابلیت آلوده کردن فریمور هارد دیسک‌ها رو داره. این بدافزار می‌تونه خودش رو در سکتورهای مخفی هارد دیسک جاسازی کنه و حتی بعد از نصب مجدد سیستم‌عامل، فعال باقی بمونه.

تشخیص BIOS Infection کار بسیار دشواری هستش چون اکثر آنتی‌ویروس‌ها و ابزارهای امنیتی معمول، قادر به اسکن کردن و شناسایی تغییرات در سطح BIOS نیستن. برای مقابله با این تهدید، استفاده از ابزارهای تخصصی مثل Chipsec یا FIDO توصیه می‌شه که می‌تونن ناهنجاری‌های موجود در BIOS رو شناسایی کنن.

پیشگیری از BIOS Infection شامل اقداماتی مثل به‌روزرسانی منظم فریمور، فعال کردن Secure Boot، محدود کردن دسترسی فیزیکی به سیستم و استفاده از پسوردهای قوی برای BIOS می‌شه. همچنین، برخی از تولیدکنندگان سخت‌افزار، مکانیزم‌های امنیتی پیشرفته‌تری مثل Intel Boot Guard رو پیاده‌سازی کردن که از تغییرات غیرمجاز در BIOS جلوگیری می‌کنه.

در صورت آلوده شدن سیستم به BIOS Infection، فرآیند پاکسازی بسیار پیچیده و گاهی غیرممکن می‌شه. در بسیاری از موارد، تنها راه حل قطعی، تعویض کامل مادربورد یا چیپ BIOS هستش. این مسئله نشون می‌ده که چرا BIOS Infection یکی از جدی‌ترین تهدیدات امنیتی در دنیای کامپیوتر به حساب میاد و چرا سازمان‌های امنیتی و شرکت‌های بزرگ فناوری، سرمایه‌گذاری زیادی روی مقابله با این نوع حملات انجام دادن.


~> @PinkOrca

👑 @gopher_academy | 💸 Donate | 💋 Boost
👍72🔥1🕊1💋1
💢 یک کتاب عملی و ساده برای درک اینکه کامپیوترها چطور کار می‌کنن، از مدار‌های low-level تا کدهای high-level، با پروژه‌های عملی متنوع.

✍️ نویسنده: Matthew Justice
🔤 زبان: انگلیسی
📖 سال انتشار: 2020
📄 تعداد صفحات: 396
🔗 مشاهده کتاب در آمازون

👑 @gopher_academy | 💸 Donate | 💋 Boost
👍4🔥2🍾2
CORS یا Cross-Origin Resource Sharing

یک مکانیزم امنیتی است که توسط مرورگرهای وب پیاده‌سازی می‌شود. این مکانیزم به صفحات وب امکان می‌دهد تا منابعی مانند فونت‌ها، تصاویر یا درخواست‌های AJAX را از دامنه‌های دیگر درخواست کنند. به صورت پیش‌فرض، به دلایل امنیتی، مرورگرها اجازه نمی‌دهند که درخواست‌های AJAX به دامنه‌های دیگر ارسال شود (سیاست‌های مبدأ مشترک یا Same-Origin Policy). CORS به شما امکان می‌دهد تا این محدودیت را تحت شرایط خاصی دور بزنید.

### نحوه کار CORS
وقتی که یک درخواست AJAX به یک دامنه دیگر ارسال می‌شود، مرورگر قبل از ارسال درخواست اصلی، یک درخواست پیش‌فلایت (preflight) به سرور مقصد ارسال می‌کند. این درخواست پیش‌فلایت یک درخواست HTTP است که از متد OPTIONS استفاده می‌کند تا ببیند آیا سرور مقصد اجازه دسترسی را می‌دهد یا خیر.

### هدرهای CORS
CORS از طریق هدرهای HTTP کنترل می‌شود. برخی از این هدرها عبارتند از:

- Access-Control-Allow-Origin:
مشخص می‌کند که چه دامنه‌هایی اجازه دارند به منابع دسترسی داشته باشند.

- Access-Control-Allow-Methods:
مشخص می‌کند که چه نوع درخواست‌هایی (GET, POST, PUT, DELETE, ...) مجاز هستند.

- Access-Control-Allow-Headers:
مشخص می‌کند که چه هدرهای سفارشی‌ای مجاز هستند.

- Access-Control-Allow-Credentials:
مشخص می‌کند که آیا کوکی‌ها و اطلاعات احراز هویت نیز می‌توانند ارسال شوند یا خیر.


### نکات مهم
- امنیت:
باید دقت کنید که هدر Access-Control-Allow-Origin را به صورت * تنظیم نکنید مگر اینکه واقعاً قصد داشته باشید منابع شما از هر دامنه‌ای قابل دسترسی باشند
.
- درخواست‌های پیش‌فلایت:
برخی از درخواست‌ها (مانند درخواست‌های با متدهای PUT یا DELETE) نیاز به درخواست پیش‌فلایت دارند. این درخواست‌ها ممکن است بر عملکرد تأثیر بگذارند.

با استفاده صحیح از CORS، می‌توانید به راحتی منابع خود را در اختیار کلاینت‌های مختلف قرار دهید در حالی که همچنان کنترل کاملی بر روی امنیت دسترسی به منابع دارید.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍82🔥1🍾1💋1
درخواست‌های پیش‌فلایت یکی از قسمت‌های کلیدی مکانیزم CORS هستند. این درخواست‌ها قبل از ارسال درخواست اصلی، به سرور ارسال می‌شوند تا بررسی شود آیا سرور مقصد اجازه می‌دهد که درخواست اصلی از دامنه دیگری ارسال شود یا خیر. درخواست‌های پیش‌فلایت با استفاده از متد HTTP OPTIONS ارسال می‌شوند.

### چرا درخواست‌های پیش‌فلایت لازم هستند؟
درخواست‌های پیش‌فلایت برای اطمینان از امنیت بیشتر و جلوگیری از حملات CSRF (Cross-Site Request Forgery) و سایر تهدیدات امنیتی طراحی شده‌اند. این درخواست‌ها قبل از ارسال درخواست‌های حساس یا پیچیده به سرور ارسال می‌شوند تا سرور تصمیم بگیرد که آیا این درخواست باید مجاز باشد یا نه.

### مواردی که باعث می‌شوند درخواست‌های پیش‌فلایت ارسال شوند:
- متدهای غیر استاندارد: اگر درخواست اصلی از متدهایی غیر از GET, POST یا HEAD استفاده کند (مانند PUT, DELETE).
- هدرهای غیر استاندارد: اگر درخواست اصلی شامل هدرهای سفارشی‌ای باشد که به صورت پیش‌فرض در درخواست‌های ساده ارسال نمی‌شوند.
- ارسال داده‌های JSON: درخواست‌های POST که بدنه آنها شامل JSON است.


#### درخواست پیش‌فلایت
قبل از ارسال درخواست DELETE`، مرورگر یک درخواست `OPTIONS به سرور ارسال می‌کند:

OPTIONS /resource/1 HTTP/1.1
Host: api.example.com
Origin: http://client.example.com
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: Authorization


#### پاسخ سرور به درخواست پیش‌فلایت
اگر سرور اجازه دهد، پاسخ به این درخواست به شکل زیر خواهد بود:

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://client.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Credentials: true


اگر سرور اجازه ندهد، درخواست اصلی ارسال نخواهد شد و مرورگر درخواست DELETE را مسدود می‌کند.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍4🎉1💋1
📌 Senior Backend Engineer (all genders) - Golang

📝 Type: Visa Sponsorship
🌍 Relocation Package:

🏢 Company: urban sports club

📍 Location: SPAIN

⌨️ Category: #Programming

🔗 Tags: #golang #gcp #c #saas #aws #cloud


👑 @gopher_academy
🔥3🎉2
ادیتور zed
ادیتور خفن و سریعی هست توی عکس هم معلومه
پیشنهاد میدم حتما تستش کنید
سرعتش واقعا خوبه

اونایی که گولنگ کار می کنن از کانفیگ زیر استفاده کنن
کافیه که توی ادیتور لاگین کنن و بعد برن قسمت تنظیمات اونجا همین فایل پایین رو کپی پیست کننید داخلش


👇👇👇👇👇

👑 @gopher_academy
🔥2🎉1🍾1
Gopher Academy
ادیتور zed ادیتور خفن و سریعی هست توی عکس هم معلومه پیشنهاد میدم حتما تستش کنید سرعتش واقعا خوبه اونایی که گولنگ کار می کنن از کانفیگ زیر استفاده کنن کافیه که توی ادیتور لاگین کنن و بعد برن قسمت تنظیمات اونجا همین فایل پایین رو کپی پیست کننید داخلش 👇👇👇👇👇
کانفیگ مخصوص گولنگ و سایر ابزارهاش
{
"auto_update_extensions": {
"sql": true,
"docker-compose": true,
"dockerfile": true,
"make": true
},
"vim_mode": false,
"ui_font_size": 16,
"buffer_font_size": 16,
"theme": {
"mode": "system",
"light": "One Light",
"dark": "One Dark"
},
"copy_on_select": true,
"autosave": {
"after_delay": {
"milliseconds": 100
}
},
"scrollbar": {
"show": "auto",
"cursors": true,
"git_diff": true,
"search_results": true,
"selected_symbol": true,
"diagnostics": true
},
"hints": {
"assignVariableTypes": true,
"compositeLiteralFields": true,
"compositeLiteralTypes": true,
"constantValues": true,
"functionTypeParameters": true,
"parameterNames": true,
"rangeVariableTypes": true
}
}
‍‍



👑 @gopher_academy
8👍1🎉1💋1
در اینجا یک مثال از نحوه پیاده‌سازی درخواست‌های پیش‌فلایت CORS در یک سرور Go با استفاده از بسته net/http آمده است:

package main

import (
"net/http"
)

func main() {
http.HandleFunc("/", handleRequest)

// اجرای سرور HTTP در پورت 8080
http.ListenAndServe(":8080", nil)
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
// تنظیم هدرهای CORS
w.Header().Set("Access-Control-Allow-Origin", "http://client.example.com")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
w.Header().Set("Access-Control-Allow-Credentials", "true")

// پاسخ به درخواست‌های پیش‌فلایت
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusNoContent)
return
}

// منطق درخواست اصلی
if r.Method == http.MethodDelete {
// منطق حذف منابع
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"message": "Resource deleted"}`))
return
}

// مدیریت سایر درخواست‌ها
w.WriteHeader(http.StatusMethodNotAllowed)
}


این کد یک سرور HTTP ساده را پیاده‌سازی می‌کند که درخواست‌های پیش‌فلایت CORS را مدیریت می‌کند و در صورت دریافت درخواست‌های `DELETE`، یک پاسخ مناسب برمی‌گرداند. برای درخواست‌های پیش‌فلایت، سرور با یک وضعیت 204 (بدون محتوا) پاسخ می‌دهد و هدرهای CORS مورد نیاز را تنظیم می‌کند.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍6🔥1🕊1
کنت بک (Kent Beck)
کنت بک خالق برنامه‌سازی مفرط و یکی از 17 بنیان‌گذار توسعه نرم‌افزاری چابک است. او درباره برنامه نویسی می‌گوید:
کدی بنویسید که کار کند، درست و اصولی باشد و سریع اجرا شود.


خوش‌بینی، یک آفت شغلی در برنامه‌ نویسی است. بازخورد گرفتن از کاربران نیز درمان آن است.

من یک برنامه نویس عالی نیستم. من فقط یک برنامه نویس خوب با عادات عالی هستم.


👑 @gopher_academy
👍13🍾1
✍️Rouzbeh SabzeheiRouzbeh Sabzehei

این یه مقاله خیلی جالب از Quickwit هست

که نشون میده چجوری بایننس ۲۱ میلیون خط معادل ۱۸ گیگ لاگ در ثانیه رو تونسته با Quickwit ذخیره و اسکیل کنه

و در مقایسه با Elasticsearch که قبلا استفاده میکردن توسنته ۵ برابر هزینه های پردازشی و ۲۰ برابر هزینه های ذخیره سازی رو کمتر کنه.

نرم افزار Quickwit یک search engine بسیار بهینه نوشته شده با زبان Rust هست

❇️ https://quickwit.io/blog/quickwit-binance-story


👑 @gopher_academy
👍5🔥4🍾3