Gopher Academy
3.33K subscribers
915 photos
40 videos
279 files
1.96K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🎯در ورژن ۲ از Grpc-Gateway دقت کنید که برای استفاده از 👇

🔺protoc-gen-swagger

در ورژن جدید تغییر نام پیدا کرد به👇
🔺protoc-gen-openapiv2
.
#note
🔰 @gopher_academy
🔷اگه چنین query برای ارتباط با postgresql دارید
🔺SELECT name FROM users WHERE id=?
🔷و خطای زیر رو در خروجی دارید
🔺“Operator does not exist: integer =?” when using Postgres
🔷پرس جوی فوق رو ویرایش کنید به صورت زیر
🔺SELECT name FROM users WHERE id = $1

#note

🔰 @gopher_academy
🎯DevOps Guide from basic to advanced with Interview Questions and Notes🎯
🎯مجموعه‌ای از نکات و موارد مصاحبه‌ای برای شغل DevOps از سطح‌بندی مقدماتی تا پیشرفته🎯

#devops #guide #cheatsheet #interview #question #questions #note

🔺 github.com/Tikam02/DevOps-Guide

🔰 @gopher_academy
Gopher Academy
بخش اول 🎯اضافه کردن Context به یک پروژه آزاد🎯 . 🔹 https://www.youtube.com/watch?v=O7aaLb3_eGU . 🔴 مدرس Forud Ghafouri 🔰 @gopher_academy
👆🏻👆🏻👆🏻👆🏻
چندتا نکته ای که توی بخش اول گفته شد
.
🔹سعی کنید برای interface ها کامنت بنویسید
🔹اگر تابعی دارید که قرار در ورودی این تابع یک استراکچر رو بگیره سعی کنید از pointer استفاده کنید. همیشه یه pointer کپی کردن بهتر از یه استراکچر کپی کردن هست چون این عمل باعث memory allcotion میشه. نمونه زیر رو درنظر بگیرید
func save (mu model.user){}

func save (mu *model.user){}
🔹سعی کنید context رو توی فایل اصلی راه اندازی کنید
🔹توی package ها تا سعی دارید از os.exit ااستفاده نکنید چون باعث میشه جلوی تمام defer ها رو بگیره و حتی جلوی باینری کردن رو هم میگیره
🔹بجای اینکه بیاید بعد هر تابع که می نویسید براش چک err انجام دهید یعنی بجای کد زیر
if err != nil {
log.Fatal(err)
}
از این دستور زیر استفاده کنید چون توی بدنه خودش از کد فوق استفاده می کنه یعنی اون nil رو برمیگردونه
return errors.warp(err,"your msg error")
🔹تا حد ممکن توی کتابخونه ها از دستور چاپ استفاده نکنید
🔹تابع بدون بدنه بعنی مثل زیر
func getInfo(a int)
اینجوری تابع رو هر وقت دیدید برید توی فولدر runtime اونجا هست
#note #tip

🔰 @gopher_academy
چندتا نکته گولنگی
.
🔹زمانی که توی فایل اصلی context دارید و این فایل به باینری تبدیل شود دیگر کنترل رو برنامه رو ندارید بهتره از singleها استفاده کنید که باعث می شود زمانی که شما ctl+c رو می زنید کل contextها killشوند. برای این کار می توانید از پکیج syscallاستفاده کنید.

🔹هروقت توی پروژه تون یه کتابخونه اضافه می کنید با پاک می کنید حتما بعدش go mod tidy رو بزنید تا مرتب کنه فایل go.mod و go.sum رو

🔹سعی کنید براب نام متغیر یا نام تابع از اسامی رزو شده گولنگ استفاده نکنید

🔹سعی کنید برای خواندن فایل بجای ioutil.readfile از os.open(pathfile.clean(mypath)) استفاده کنید برای Footprint memory

🔹 سعی کنید برای نمایش فایل های json-xml-yaml بجای unmarshal از json.newdeocer or json.newdecoder استفاده کنید برای Footprint memory

.
#note #tip

🔰 @gopher_academy
🔻چندتا نکته گولنگی🔻

🟢زمانی که توی فایل اصلی context دارید و این فایل به باینری تبدیل شود دیگر کنترل رو برنامه رو ندارید بهتره از singleها استفاده کنید که باعث می شود زمانی که شما ctl+c رو می زنید کل contextها killشوند. برای این کار می توانید از پکیج syscallاستفاده کنید.

🟢هروقت توی پروژه تون یه کتابخونه اضافه می کنید با پاک می کنید حتما بعدش go mod tidy رو بزنید تا مرتب کنه فایل go.mod و go.sum رو

🟢سعی کنید براب نام متغیر یا نام تابع از اسامی رزو شده گولنگ استفاده نکنید

🟢سعی کنید برای خواندن فایل بجای ioutil.readfile از os.open(pathfile.clean(mypath)) استفاده کنید برای Footprint memory

🟢 سعی کنید برای نمایش فایل های json-xml-yaml بجای unmarshal از json.newdeocer or json.newdecoder استفاده کنید برای Footprint memory

🟢سعی کنید برای interface ها کامنت بنویسید

🟢اگر تابعی دارید که قرار در ورودی این تابع یک استراکچر رو بگیره سعی کنید از pointer استفاده کنید. همیشه یه pointer کپی کردن بهتر از یه استراکچر کپی کردن هست چون این عمل باعث memory allcotion میشه. نمونه زیر رو درنظر بگیرید
func save (mu model.user){}

func save (mu *model.user){}
🟢سعی کنید context رو توی فایل اصلی راه اندازی کنید

🟢توی package ها تا سعی دارید از os.exit ااستفاده نکنید چون باعث میشه جلوی تمام defer ها رو بگیره و حتی جلوی باینری کردن رو هم میگیره

🟢بجای اینکه بیاید بعد هر تابع که می نویسید براش چک err انجام دهید یعنی بجای کد زیر
if err != nil {
log.Fatal(err)
}
از این دستور زیر استفاده کنید چون توی بدنه خودش از کد فوق استفاده می کنه یعنی اون nil رو برمیگردونه
return errors.warp(err,"your msg error")

🟢تا حد ممکن توی کتابخونه ها از دستور چاپ استفاده نکنید

🟢تابع بدون بدنه بعنی مثل زیر
func getInfo(a int)

اینجوری تابع رو هر وقت دیدید برید توی فولدر runtime اونجا هست
#note #tip

🔰 @gopher_academy
#note

For high-write environments, B-Tree indexes may not be ideal. Instead, LSM trees are
often used. New records are written quickly to an active memtable in memory. Older
memtables are then transformed into SSTables and moved to disk, avoiding disruption
to current writes. Over time, these SSTables are compacted and reorganized, enhancing
future write and read operations.

☕️ Buy Coffee me!

🕊 @gopher_academy | @GolangEngineers
👍1