Gopher Academy
3.87K subscribers
927 photos
40 videos
280 files
2.09K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
پروژه *Q چیست؟ هوش مصنوعی محرمانه OpenAI که کارشناسان را نگران کرده است

https://digiato.com/artificial-intelligence/what-is-project-q-openai


🕊 @gopher_academy | @GolangEngineers
🍾6🔥1
🔴بقول Uncle Bob، سیستم‌هایی که SOLID در آن رعایت نمی‌شود این ۴ مورد را همراه خود خواهند داشت

Rigidity
در واقع Rigidity یعنی ناتوانی در تغییر. /  اگر برای تغییر دادن بخش کوچکی از کد مجبور شویم کل سیستم را مجددا rebuild کنیم، آنوقت آن دچار Rigidty شده است.

Fragility
مفهوم Fragility و Rigidity بسیار بهم نزدیک اند. درواقع علت و معلول یکدیگر هستند. Fragility اشاره دارد به اینکه هر موقع تغییری در سیستم ایجاد می‌کنید در بخش (یا بخش‌های) دیگری از سیستم - که حتی هیچ ربطی با آن قسمت ندارد - با خطا و مشکل مواجه می‌شوید.

Immobility
نتوانیم آن قسمت از کد یا کامپوننت را در دیگر بخش‌های سیستم استفاده کنیم.

Viscosity
این مفهوم Viscosity مقاومت در مقابل تغییر است. وقتی که ساخت مجدد و تست سیستم برای ما سخت می‌شود و ترجیح بدهیم از خیر تغییرات آن قسمت بگذریم، آنگاه کد ما viscous است.


🕊 @gopher_academy | @GolangEngineers
👍164🔥1🍾1
#fun

😂😂😂


🕊 @gopher_academy | @GolangEngineers
😁27👍1
Example Diff slices generic with removed or added result

#useful_code

func Diff[T comparable](listA, listB []T) (removed, added []T) {
mapA := make(map[T]bool)
mapB := make(map[T]bool)

for _, item := range listA {
mapA[item] = true
}

for _, item := range listB {
mapB[item] = true
}

for item := range mapA {
if !mapB[item] {
removed = append(removed, item)
}
}

for item := range mapB {
if !mapA[item] {
added = append(added, item)
}
}

return removed, added
}


test

func TestDiff(t *testing.T) {
tests := []struct {
name string
listA []string
listB []string
result struct {
removed []string
added []string
}
}{
{
name: "b removed and e added",
listA: []string{"a", "b", "c", "d"},
listB: []string{"a", "c", "d", "e"},
result: struct{ removed, added []string }{removed: []string{"b"}, added: []string{"e"}},
},
{
name: "No Differences",
listA: []string{"a", "b", "c"},
listB: []string{"a", "b", "c"},
result: struct{ removed, added []string }{removed: nil, added: nil},
},
{
name: "Items Only in List B",
listA: []string{"a"},
listB: []string{"a", "b", "c"},
result: struct{ removed, added []string }{removed: nil, added: []string{"b", "c"}},
},
{
name: "Empty Lists",
listA: []string{},
listB: []string{},
result: struct{ removed, added []string }{removed: nil, added: nil},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
removed, added := Diff(tt.listA, tt.listB)

if !reflect.DeepEqual(removed, tt.result.removed) {
t.Errorf("Removed items mismatch. Expected %v, got %v", tt.result.removed, removed)
}

if !reflect.DeepEqual(added, tt.result.added) {
t.Errorf("Added items mismatch. Expected %v, got %v", tt.result.added, added)
}
})
}
}



🕊 @gopher_academy | @GolangEngineers
👍6
📬 کتابخانه amqp (Production Ready RabbitMQ Client)


پکیج AMQP یک پوشش برای amqp091-go (RabbitMQ Client) است و به طور خاص بر روی مدیریت اتصال‌های پایدار و ایمن تمرکز دارد. این پکیج یک رابط سطح بالا فراهم می‌کند که برای ارتباط با RabbitMQ استفاده می‌شود و بر اعتبار و ایمنی در اداره اتصال تأکید دارد. ویژگی‌های کلیدی شامل استراتژی‌های خودکار باز‌ارتباط، یک API ساده برای ایجاد مصرف‌کنندگان و انتشار‌دهندگان، و بسته‌شدن اتصال است. با توجه به پوشاندن amqp091-go با توجه به پایداری و ایمنی، این پکیج کمک می‌کند تا ارسال پیام به‌صورت قوی و ایمن در برنامه‌های Go فراهم شود. با مطالعه مستندات، توانمندی AMQP را با اطمینان در پروژه‌های خود بهره‌مند شوید.

مخزن: https://github.com/Ja7ad/amqp/
داکیومنت: https://pkg.go.dev/github.com/Ja7ad/amqp


🕊 @gopher_academy | @GolangEngineers
👍81🎉1
سالواتوره سانفیلیپو (سازنده Redis) توی 46 سالگی چه حوصله‌ای داره. نشسته با زبان C یه فریمورک واسه برنامه نویسی ربات تلگرام نوشته!

https://github.com/antirez/botlib

#DevTwitter | <Pesar/>

🕊 @gopher_academy | @GolangEngineers
👍12😁32🔥1🕊1🐳1🍾1
یک ابزار انلاین خوب برای نمایش قابل فهم محتواهای بزرگ json

https://jsongrid.com/json-parser


🕊 @gopher_academy | @GolangEngineers
👍2🍾1💊1
دورهمی هفته دوازدهم (یادآوری - اطلاعات ورود میتینگ)

این هفته بصورت مقدماتی به موضوع کریپتوگرافی کلید عمومی می پردازیم که یکی از اساسی ترین موضوع دنیای رمزنگاری و بلاکچین هست.


- موضوع: An introduction to the public-key cryptography
- تاریخ و ساعت: ۹ آذر ساعت ۷ شب
- اسپانسر: GoBridge
- ارائه دهنده: مهندس مصطفی صداقت جو (توسعه دهنده و Maintainer پروژه بلاکچین Pactus )
- محل برگزاری: پلت فرم zoom و گوگل میت


اطلاعات ورود به میتینگ

۱. از طریق گوگل میتینگ: https://meet.google.com/axn-cwds-xqn
۲. از طریق zoom :
- لینک ورود: https://us02web.zoom.us/j/86712676395?pwd=NXNxRlZ4dnNETXF3RXBTWXM4UXYrZz09
- شناسه و رمز: 86712676395 - 944574



🕊 @gopher_academy | @GolangEngineers
🍾4👍31
🪲 مشارکت برای حل مشکل در کتابخانه amqp

دوستان بعد از مدت ها سروکله زدن با این کتابخانه که دیروز منتشر کردم یک مشکلی در reconnection Publisher وجود دارد که هنوز نتونستم درک کنم.

https://github.com/Ja7ad/amqp/issues/1

اگر مایل هستید با مشارکتتان در حل این مشکل کمک کنید تا به پایداری کامل برسونم.

نکته ای که هست Consumer کاملا پایدار هست و بدونی هیچ مشکلی reconnection را انجام می دهد ولی سمت Publisher دلیلی نیافتم که چرا کانکشن بسته میشه روی reconnection.



🕊 @gopher_academy | @GolangEngineers
👍3💊3
در زیر بنچمارکی داریم درخصوص تعداد شرط های زیاد استفاده از switch یا else if به نظرتان کدام انتخاب مناسبی هست؟

package switch_if

import (
"github.com/brianvoe/gofakeit/v6"
"testing"
)

var providers = []string{"Google", "Microsoft", "Apple", "GitHub", "Twitter", "Twitch", "Facebook"}

type ProviderEmail struct {
Google string
Microsoft string
Apple string
GitHub string
Twitter string
Twitch string
Facebook string
}

func BenchmarkSwitch(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()

for i := 0; i < b.N; i++ {
provider := generateRandomProviderEmail()
switch {
case len(provider.GitHub) != 0:
_ = "GitHub"
case len(provider.Google) != 0:
_ = "Google"
case len(provider.Microsoft) != 0:
_ = "Microsoft"
case len(provider.Apple) != 0:
_ = "Apple"
case len(provider.Twitter) != 0:
_ = "Twitter"
case len(provider.Twitch) != 0:
_ = "Twitch"
case len(provider.Facebook) != 0:
_ = "Facebook"
}
}
}

func BenchmarkIfElse(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()

for i := 0; i < b.N; i++ {
provider := generateRandomProviderEmail()
if len(provider.GitHub) != 0 {
_ = "GitHub"
} else if len(provider.Google) != 0 {
_ = "Google"
} else if len(provider.Microsoft) != 0 {
_ = "Microsoft"
} else if len(provider.Apple) != 0 {
_ = "Apple"
} else if len(provider.Twitter) != 0 {
_ = "Twitter"
} else if len(provider.Twitch) != 0 {
_ = "Twitch"
} else if len(provider.Facebook) != 0 {
_ = "Facebook"
}
}
}

func generateRandomProviderEmail() *ProviderEmail {
randomProvider := &ProviderEmail{}

randomProvider.setRandomField()

return randomProvider
}

func (p *ProviderEmail) setRandomField() {
randomField := gofakeit.RandomString(providers)
randomEmail := gofakeit.Email()
switch randomField {
case "Google":
p.Google = randomEmail
case "Microsoft":
p.Microsoft = randomEmail
case "Apple":
p.Apple = randomEmail
case "GitHub":
p.GitHub = randomEmail
case "Twitter":
p.Twitter = randomEmail
case "Twitch":
p.Twitch = randomEmail
case "Facebook":
p.Facebook = randomEmail
}
}


نتیجه بنچمارک:

goos: linux
goarch: amd64
pkg: switch-if
cpu: AMD Ryzen 7 5700U with Radeon Graphics
BenchmarkSwitch
BenchmarkSwitch-16 2169474 559.9 ns/op 88 B/op 4 allocs/op
BenchmarkIfElse
BenchmarkIfElse-16 2134839 556.0 ns/op 88 B/op 4 allocs/op
PASS



🕊 @gopher_academy | @GolangEngineers
👍6🔥1🎉1🐳1🍾1
♻️How to Observe Your CI/CD Pipelines with OpenTelemetry

https://thenewstack.io/how-to-observe-your-ci-cd-pipelines-with-opentelemetry/


🕊 @gopher_academy | @GolangEngineers
👍3🔥1
🌷Go Fact: Zero-sized Field at the Rear of a Struct Has Non-zero Size

https://i.hsfzxjy.site/zst-at-the-rear-of-go-struct/


🕊 @gopher_academy | @GolangEngineers
👍4
♻️Postgres Weekly Issue 532:

♻️November 29, 2023

https://postgresweekly.com/issues/532


🕊 @gopher_academy | @GolangEngineers
👍4
Kubernets => k8s 😉

🕊 @gopher_academy | @GolangEngineers
👍6
Forwarded from Gopher Academy (Javad)
دورهمی هفته دوازدهم (یادآوری - اطلاعات ورود میتینگ)

این هفته بصورت مقدماتی به موضوع کریپتوگرافی کلید عمومی می پردازیم که یکی از اساسی ترین موضوع دنیای رمزنگاری و بلاکچین هست.


- موضوع: An introduction to the public-key cryptography
- تاریخ و ساعت: ۹ آذر ساعت ۷ شب
- اسپانسر: GoBridge
- ارائه دهنده: مهندس مصطفی صداقت جو (توسعه دهنده و Maintainer پروژه بلاکچین Pactus )
- محل برگزاری: پلت فرم zoom و گوگل میت


اطلاعات ورود به میتینگ

۱. از طریق گوگل میتینگ: https://meet.google.com/axn-cwds-xqn
۲. از طریق zoom :
- لینک ورود: https://us02web.zoom.us/j/86712676395?pwd=NXNxRlZ4dnNETXF3RXBTWXM4UXYrZz09
- شناسه و رمز: 86712676395 - 944574



🕊 @gopher_academy | @GolangEngineers
3🔥1🍾1
Gopher Academy
دورهمی هفته دوازدهم (یادآوری - اطلاعات ورود میتینگ) این هفته بصورت مقدماتی به موضوع کریپتوگرافی کلید عمومی می پردازیم که یکی از اساسی ترین موضوع دنیای رمزنگاری و بلاکچین هست. - موضوع: An introduction to the public-key cryptography - تاریخ و ساعت: ۹ آذر…
دوستان دورهمی ۲۰ دقیقه دیگر شروع می شود و از طریق لینک ها و اطلاعات زیر می توانید وارد شوید:

اطلاعات ورود به میتینگ

۱. از طریق گوگل میتینگ: https://meet.google.com/axn-cwds-xqn
۲. از طریق zoom :
- لینک ورود: https://us02web.zoom.us/j/86712676395?pwd=NXNxRlZ4dnNETXF3RXBTWXM4UXYrZz09
- شناسه و رمز: 86712676395 - 944574


🕊 @gopher_academy | @GolangEngineers
👍4🍾3
4
خیلی ها به سیستم عامل های کاستوم دید منفی دارن که خب درست هم هست؛ ویدویی تو يوتيوب دیدم که روال کار ساخت سیستم عامل کاستوم رو بهتون آموزش میده و برای خیلی ها میتونه مفید واقع بشه.

https://youtu.be/tSs-jkVRcXM?si=-zo-NQxhR2aBMqc7

#DevTwitter | <Nima Nikjoo/>


🕊 @gopher_academy | @GolangEngineers
👍2🕊21🍾1
Understanding_Cryptography.pdf
4.7 MB
دورهمی هفته دوازدهم مهندسین گولنگ (ویدئو)

موضوع: An introduction to the public-key cryptography

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


🔗 لینک ویدئو در یوتیوب: https://www.youtube.com/watch?v=2qKS0eyuNiQ

☑️ پروژه پکتوس: https://pactus.org

مقاله: https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/#algebraic-addition




🕊 @gopher_academy | @GolangEngineers
🔥9👍1