Gopher Academy
Ir al canal en Telegram
🕸 Gopher Academy 🔷interview golang https://github.com/mrbardia72/Go-Interview-Questions-And-Answers حمایت مالی: https://www.coffeete.ir/mrbardia72 ادمین: @mrbardia72
Mostrar más3 832
Suscriptores
Sin datos24 horas
+97 días
+1830 días
Carga de datos en curso...
Canales Similares
Nube de Etiquetas
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
agosto '26
agosto '26
+69
en 4 canales
julio '26
+58
en 0 canales
Get PRO
junio '26
+67
en 0 canales
Get PRO
mayo '26
+45
en 0 canales
Get PRO
abril '26
+24
en 5 canales
Get PRO
marzo '26
+10
en 0 canales
Get PRO
febrero '26
+79
en 1 canales
Get PRO
enero '26
+29
en 8 canales
Get PRO
diciembre '25
+103
en 7 canales
Get PRO
noviembre '25
+72
en 0 canales
Get PRO
octubre '25
+598
en 1 canales
Get PRO
septiembre '25
+61
en 6 canales
Get PRO
agosto '25
+84
en 9 canales
Get PRO
julio '25
+99
en 10 canales
Get PRO
junio '25
+47
en 7 canales
Get PRO
mayo '25
+45
en 1 canales
Get PRO
abril '25
+63
en 8 canales
Get PRO
marzo '25
+90
en 8 canales
Get PRO
febrero '25
+91
en 3 canales
Get PRO
enero '25
+96
en 3 canales
Get PRO
diciembre '24
+113
en 7 canales
Get PRO
noviembre '24
+94
en 2 canales
Get PRO
octubre '24
+116
en 4 canales
Get PRO
septiembre '24
+138
en 4 canales
Get PRO
agosto '24
+101
en 2 canales
Get PRO
julio '24
+187
en 5 canales
Get PRO
junio '24
+173
en 11 canales
Get PRO
mayo '24
+301
en 2 canales
Get PRO
abril '24
+185
en 3 canales
Get PRO
marzo '24
+172
en 3 canales
Get PRO
febrero '24
+154
en 0 canales
Get PRO
enero '24
+207
en 0 canales
Get PRO
diciembre '23
+215
en 4 canales
Get PRO
noviembre '23
+77
en 2 canales
Get PRO
octubre '23
+79
en 0 canales
Get PRO
septiembre '23
+70
en 0 canales
Get PRO
agosto '23
+108
en 0 canales
Get PRO
julio '23
+68
en 0 canales
Get PRO
junio '23
+106
en 0 canales
Get PRO
mayo '23
+211
en 0 canales
Get PRO
abril '23
+142
en 0 canales
Get PRO
marzo '23
+56
en 0 canales
Get PRO
febrero '23
+70
en 0 canales
Get PRO
enero '23
+62
en 0 canales
Get PRO
diciembre '22
+14
en 0 canales
Get PRO
noviembre '22
+24
en 0 canales
Get PRO
octubre '22
+15
en 0 canales
Get PRO
septiembre '22
+78
en 0 canales
Get PRO
agosto '22
+47
en 0 canales
Get PRO
julio '22
+36
en 0 canales
Get PRO
junio '22
+26
en 0 canales
Get PRO
mayo '22
+27
en 0 canales
Get PRO
abril '22
+14
en 0 canales
Get PRO
marzo '22
+21
en 0 canales
Get PRO
febrero '22
+13
en 0 canales
Get PRO
enero '22
+24
en 0 canales
Get PRO
diciembre '21
+51
en 0 canales
Get PRO
noviembre '21
+107
en 0 canales
Get PRO
octubre '21
+13
en 0 canales
Get PRO
septiembre '21
+31
en 0 canales
Get PRO
agosto '21
+29
en 0 canales
Get PRO
julio '21
+41
en 0 canales
Get PRO
junio '21
+29
en 0 canales
Get PRO
mayo '21
+26
en 0 canales
Get PRO
abril '21
+49
en 0 canales
Get PRO
marzo '21
+376
en 0 canales
| Fecha | Crecimiento de Suscriptores | Menciones | Canales | |
| 31 agosto | +2 | |||
| 30 agosto | +3 | |||
| 29 agosto | +3 | |||
| 28 agosto | +1 | |||
| 27 agosto | +2 | |||
| 26 agosto | +1 | |||
| 25 agosto | +4 | |||
| 24 agosto | +3 | |||
| 23 agosto | +5 | |||
| 22 agosto | +2 | |||
| 21 agosto | +2 | |||
| 20 agosto | +3 | |||
| 19 agosto | +1 | |||
| 18 agosto | 0 | |||
| 17 agosto | +1 | |||
| 16 agosto | +1 | |||
| 15 agosto | +3 | |||
| 14 agosto | 0 | |||
| 13 agosto | +2 | |||
| 12 agosto | +3 | |||
| 11 agosto | +1 | |||
| 10 agosto | 0 | |||
| 09 agosto | +1 | |||
| 08 agosto | +4 | |||
| 07 agosto | +3 | |||
| 06 agosto | +5 | |||
| 05 agosto | +6 | |||
| 04 agosto | 0 | |||
| 03 agosto | +4 | |||
| 02 agosto | +1 | |||
| 01 agosto | +2 |
Publicaciones del Canal
| 2 | 🔵 عنوان مقاله
7.5x Faster Encryption with simd and simd/archsimd
🟢 خلاصه مقاله:
در نسخه ۱.۲۷ زبان برنامهنویسی Go، توسعهای خاص و نوآورانه به چشم میخورد که تمرکز آن بر بهرهگیری از بستههای جدید و آزمایشی SIMD است. این فناوری توانسته است روند رمزگذاری اطلاعات را به شدت سریعتر کند، بهطوری که اخیراً تحقیقات نشان داده است سرعت رمزنگاری با الگوریتم ChaCha20 تا ۷.۵ برابر افزایش یافته است. این توسعه نشان میدهد چگونه بهرهگیری از قابلیتهای پیشرفته SIMD بدون نیاز به نوشتن کدهای اسمبلی، میتواند در کاهش زمان پردازش نقش مؤثری ایفا کند.
در این پروژه، تیم توسعهدهنده به جای استفاده از کدهای اسمبلی پیچیده، از بستههای جدید و آزمایشی SIMD در زبان Go بهره برده است تا عملیات رمزنگاری را تسریع کند. این کار بخصوص در بستر_ARM64_ نتیجه بسیار مطلوبی داشته است، جایی که نسخه بدون اسمبلی در زبان Go تقریباً با نسخه نوشته شده به صورت دستی برابری میکند. این موفقیت نشان میدهد که با بهرهگیری هوشمندانه از فناوریهای نوین، میتوان کارایی برنامههای رمزنگاری را در سطح بالایی حفظ کرد و در عین حال کدهای سادهتر و قابل نگهداریتر تولید کرد.
بنابراین، این تحولات نه تنها مهم برای توسعه دهندگان برنامههای امنیتی است، بلکه نویدبخش آیندهای است که در آن رمزگذاری سریعتر و کارآمدتر بدون نیاز به تخصص در کدنویسی سطح پایین، امری ممکن خواهد بود. این پیشرفتها نشان میدهد که فناوریهای نوین مانند SIMD میتوانند در توسعه نرمافزارهای امن و بهینه نقش کلیدی ایفا کنند و مسیر را برای نوآوریهای بیشتر هموار سازند.
#رمزگذاری #SIMD #GoLang #توسعه_پیشرفته
🟣لینک مقاله:
https://kerkour.com/golang-chacha20-encryption-simd-archsimd
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 216 |
| 3 | 🔵 عنوان مقاله
Goldmark 2.0: A Markdown Parser Written in Go
🟢 خلاصه مقاله:
در هفتههای اخیر، نسخه جدید و قابل توجهی از Goldmark 2.0 معرفی شده است؛ یک پارسر مارکداون قدرتمند که با زبان برنامهنویسی گو نوشته شده است. این بروزرسانی، اولین تغییر عمده پس از هفت سال است که برای این پارسر استاندارد و مطابق با معیارهای CommonMark در حوزه زبان برنامهنویسی گو ارائه میشود. در این نسخه، چندین ویژگی جدید و بهبودهای مهم دیده میشود که توسعهدهندگان و کاربران را قادر میسازد تا تجربهی بهتری در کار با مارکداون داشته باشند.
یکی از مهمترین تحولات در این نسخه، پشتیبانی از جنریکها است که سطح جدیدی از انعطافپذیری و کارایی را فراهم میکند. این ویژگی به توسعهدهندگان اجازه میدهد تا کدهای سادهتر و قابلارتقا تری بنویسند، بدون اینکه نگران تعارضهای موجود در ساختارهای داده باشند. همچنین، ساختار پارسر و رندرر حالا مستقلتر از هم عمل میکنند، که این موضوع امکان تنظیمات و شخصیسازیهای دقیقتر در خروجیهای غیر HTML را فراهم کرده است. در نهایت، هر گره در ساختار درختی یا AST دارای اطلاعات موقعیت دقیقی است، که این امر در فرآیندهای تحلیل و پردازش متن نقش بسزایی دارد.
در نتیجه، نسخه ۲.۰ Goldmark، یک انقلاب در نحوهی پردازش و تبدیل مارکداون است، که بهرهوری، انعطافپذیری و سازگاری بیشتری نسبت به نسخههای قبلی ارائه میدهد. این بروزرسانی نشان میدهد که توسعهدهندگان این پروژه به دقت و با تمرکز بر نیازهای جامعه، در تلاش برای بهبود و تطابق ابزارهای خود با استانداردهای روز هستند، تا بتوانند در پروژههای مختلف بهترین تجربه را برای کاربران خود رقم بزنند.
#Goldmark #مارکداون #برنامهنویسی #توسعه
🟣لینک مقاله:
https://github.com/yuin/goldmark
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 191 |
| 4 | پس چه زمانی از کدام استفاده کنیم؟👾 | 189 |
| 5 | این تایپ uintptr اصلاً چیه؟
یکی از کاربردهای اصلی آن تعامل با APIهای low-level و unsafe است.
مثلاً:
package main
import (
"fmt"
"unsafe"
)
func main() {
x := 42
p := unsafe.Pointer(&x)
addr := uintptr(p)
fmt.Printf("address = %#x\n", addr)
}
اینجا addr یک آدرس عددی است.
یعنی:
*x
↓
Pointer
↓
unsafe.Pointer
↓
uintptr
↓
numeric address
آیا اصلا uint و uintptr اندازه یکسانی دارند؟
معمولاً بله، ولی مفهومشان متفاوت است.
طبق مشخصات Go، اندازه uintptr به اندازهای است که بتواند مقدار یک pointer را نگه دارد.
مثلاً روی معماری 64-bit:
uint → 64 bit
uintptr → 64 bit
pointer → 64 bit
ولی این به این معنی نیست که:
uint == uintptr
اینها دو type متفاوت هستند:
var a uint
var b uintptr
a = b // compile error
باید conversion صریح انجام شود:
a = uint(b)
اینم بگم که *uint با uintptr کاملاً متفاوت است
این:
*uint
یعنی:
pointer به یک متغیر از نوع
uint
مثلاً:
x := uint(42)
p := &x
نوع p:
*uint
و:
*p
مقدار:
42
است.
در مقابل:
var u uintptr
یک عدد است، نه pointer.
مقایسه
*uint
│
└── pointer
│
└── points to uint object
│
└── 42
uintptr
│
└── unsigned integer
│
└── may contain a numeric memory address | 148 |
| 6 | 🔵 عنوان مقاله
Go 1.27 Released
🟢 خلاصه مقاله:
در نسخهی جدید، یعنی نسخهی ۱.۲۷، تغییرات و بهبودهای قابلتوجهی صورت گرفته است که انتظار میرود توسعهدهندگان و کاربران زبان برنامهنویسی Go را به شدت راضی کند. در طول دورهی گذشته، تمرکز اصلی بر روی آمادهسازی این نسخه و رفع نواقص بوده است، و اکنون با انتشار رسمی، تمامی ویژگیها و اصلاحات نهایی در اختیار کاربران قرار گرفته است. این نسخه با بسیاری از قابلیتهای جدید و بهینهسازیهای عملکردی همراه است که هدف اصلی آن ارتقاء کارایی و سهولت در توسعه برنامههای نوین است.
نسخهی ۱.۲۷، پس از جلسات فنی و بررسیهای متعدد، به پایان رسیده و اکنون آماده است تا در پروژههای مختلف مورد استفاده قرار گیرد. تیم توسعهدهنده، به رهبری Jesús Espino، تلاش کرده است تا با انتشار این نسخه، پایداری و امنیت زبان Go را هر چه بیشتر تضمین کند و امکانات جدیدی را برای برنامهنویسان فراهم آورد. این بروزرسانی، نشان دهندهی تعهد مداوم جامعهی Go به بهبود و توسعهی زبان است که در نتیجه، مزایای فراوانی برای توسعه دهندگان و شرکتهای فناوری ایجاد میکند.
در مجموع، نسخهی ۱.۲۷ گواهی بر تلاش بیوقفه در جهت پیشرفت فناوری و افزایش بهرهوری است. کسانی که از قبل با این زبان کار میکردند، حالا میتوانند از قابلیتهای جدید بهرهمند شده و پروژههای خود را با اطمینان بیشتری پیش ببرند. این نسخه، به عنوان یک دستاورد مهم در مسیر توسعهی Go، نشانگر تعهد جامعه و تیم توسعه به آیندهای روشن و نوآور است.
#برنامه_نویسی #زبان_گو #نسخه_جدید #توسعه_فناوری
🟣لینک مقاله:
https://go.dev/blog/go1.27
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 141 |
| 7 | این فیلم به نظرم پاسخ کامل و جامعی هست به کسانی که مخالف استفاده از AI در برنامهنویسی هستند!
♥️ خالق زبان برنامه نویسی سی پلاس پلاس | 153 |
| 8 | درود دوستان 🌱
اگر روی GitHub سورسکدی دارید که دوست دارید معرفی بشه، میتونید برام پیام بفرستید تا در کانال معرفی کنیم.
بسته به نوع و موضوع سورسکد، اون رو در یکی از کانالهای مرتبط منتشر میکنم.
فقط لطفاً همراه سورسکدی که میفرستید، یک توضیح مختصر و مفید هم درباره پروژه، کاربردش و اینکه چه مشکلی رو حل میکنه ارسال کنید تا همون توضیح رو در کانال مربوطه اضافه کنم.
👤 ادمین:
@mrbardia72 | 143 |
| 9 | 🔵 عنوان مقاله
Staticcheck: A State of the Art Linter for Go 1.27
🟢 خلاصه مقاله:
استاتیکچک، یکی از پیشرفتهترین ابزارهای تحلیل استاتیک برای زبان برنامهنویسی Go، با هدف کمک به توسعهدهندگان در کشف خطاها، مسائل مربوط به کارایی، و بهبود کد طراحی شده است. این لایتر قدرتمند با بیش از ۱۵۰ بررسی مختلف، نه تنها امکان شناسایی اشکالات و بهینهسازیهای لازم در کد را فراهم میکند، بلکه قواعد سبک و قواعد نگارش کد را نیز به صورت جامع اجرا میکند. نسخه جدید این ابزار، پشتیبانی از نسخه ۱۷ Go را اضافه کرده است که نشان از تلاش مداوم تیم توسعه برای پاسخگویی به نیازهای جامعه برنامهنویسان دارد.
استاتیکچک با بهرهگیری از تحلیل استاتیک، به توسعهدهندگان کمک میکند تا خطاهای احتمالی را قبل از اجرای برنامه کشف و رفع کنند و به این ترتیب کیفیت و پایداری کد را به طور قابل توجهی افزایش دهد. طراحی کاربرپسند و قابلیتهای گسترده این ابزار، آن را به یکی از محبوبترین گزینهها در توسعه برنامههای Go تبدیل کرده است. بهروزرسانیهای مداوم و افزودن امکانات جدید، نشاندهنده تعهد توسعهدهندگان این ابزار به توسعه جامعه برنامهنویسی Go است.
در مجموع، استاتیکچک ابزاری است حیاتی برای برنامهنویسانی که به دنبال کد تمیز، بهینه و مقاوم در برابر خطا هستند، و نسخه جدید آن، با پشتیبانی از آخرین نسخههای Go، راه را برای توسعه برنامههای مطمئن و کارا هموار میسازد.
#برنامه_نویسی #GoLang #برنامه_نویسی_امن #ابزارهای_توسعه
🟣لینک مقاله:
https://staticcheck.dev/
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 199 |
| 10 | پروژه Rostam یک دیتابیس برداری متنباز و یک Key-Value Store با تأخیر بسیار پایین است که با زبان Go نوشته شده و میتواند هم به صورت کتابخانه داخلی و هم بهعنوان سرویس مستقل اجرا شود.
https://docs.rostamlabs.com
https://github.com/rostamlabs/rostam | 277 |
| 11 | درود و وقت بخیر دوستان.
آیا کسی اینجا هست که در شرکت دیوار کار کنه؟
یک سوال داشتم.
اگر کسی هست بهم پیام بده👇
@Mrbardia72 | 232 |
| 12 | sticker.webp | 291 |
| 13 | ☝️ ویژگیهای Go 1.26 رو از اینجا دنبال کنید. این پست بهمرور بهروزرسانی میشه و بعد از اون میریم سراغ ویژگیهای Go 1.27. | 274 |
| 14 | 🎖Process Handle
بعد از اینکه یک process را در Go اجرا میکنید، میتوانید شناسهٔ آن، یعنی PID، را در اختیار داشته باشید:
attr := &os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}}
proc, _ := os.StartProcess("/bin/echo", []string{"echo", "hello"}, attr)
defer proc.Wait()
fmt.Println("pid =", proc.Pid)
اما در داخل runtime، نوع os.Process ــ در صورتی که سیستمعامل پشتیبانی کند ــ بهجای PID که صرفاً یک عدد صحیح است، از یک process handle استفاده میکند.
در لینوکس، این handle مشخصاً یک pidfd است؛ یعنی یک file descriptor که به یک process اشاره میکند.
استفاده از handle بهجای PID یک مزیت مهم دارد: متدهای Process تضمین میکنند که همیشه با همان process موردنظر کار میکنند، نه با process دیگری که صرفاً بهصورت تصادفی همان ID را دریافت کرده باشد.
این مسئله مهم است چون PIDها قابل reuse شدن هستند.
دسترسی به handle
پیش از Go 1.26 امکان دسترسی مستقیم به process handle وجود نداشت.
اکنون متد جدید Process.WithHandle این امکان را فراهم میکند:
func (p *Process) WithHandle(f func(handle uintptr)) error
ا WithHandle یک function مشخصشده توسط شما را فراخوانی میکند و process handle را بهعنوان آرگومان در اختیار آن قرار میدهد:
attr := &os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}}
proc, _ := os.StartProcess("/bin/echo", []string{"echo", "hello"}, attr)
defer proc.Wait()
fmt.Println("pid =", proc.Pid)
proc.WithHandle(func(handle uintptr) {
fmt.Println("handle =", handle)
})
یک ویژگی مهم این است که handle تضمین میکند تا زمانی که callback برنگشته است، همچنان به همان process اشاره کند؛ حتی اگر process در این فاصله terminate شده باشد.
به همین دلیل API بهصورت callback طراحی شده است، نه مثلاً به شکل یک field یا method مانند:
Process.Handle
چنین طراحیای امکان میدهد lifetime مربوط به handle بهطور دقیق کنترل شود و handle پس از پایان callback معتبر تلقی نشود. | 264 |
| 15 | 🎖Peek into a Buffer
در Go 1.26، package bytes متد جدید Buffer.Peek را اضافه کرده است.
این متد N بایت بعدی buffer را برمیگرداند، بدون اینکه موقعیت خواندن (read position) را جلو ببرد:
buf := bytes.NewBufferString("I love bytes")
sample, err := buf.Peek(1)
fmt.Printf("peek=%s err=%v\n", sample, err)
buf.Next(2)
sample, err = buf.Peek(4)
fmt.Printf("peek=%s err=%v\n", sample, err)
بنابراین Peek برای زمانی مفید است که بخواهید قبل از مصرف داده، بخش بعدی آن را بررسی کنید.
اگر Peek نتواند N بایت کامل را برگرداند، علاوه بر دادهٔ موجود، مقدار خطای io.EOF را نیز برمیگرداند:
buf := bytes.NewBufferString("hello")
sample, err := buf.Peek(10)
fmt.Printf("peek=%s err=%v\n", sample, err)
در این مثال فقط ۵ بایت در buffer وجود دارد، بنابراین Peek(10) همان ۵ بایت موجود را برمیگرداند و io.EOF را نیز گزارش میکند.
نکتهٔ مهم دربارهٔ slice بازگرداندهشده
ا sliceای که Peek برمیگرداند، به محتوای خود buffer اشاره میکند و یک copy مستقل نیست.
این slice تا زمانی معتبر است که buffer تغییر نکرده باشد. بنابراین اگر بلافاصله محتوای slice را تغییر دهید، در واقع buffer زیرین را تغییر دادهاید و این تغییر در خواندنهای بعدی دیده خواهد شد:
buf := bytes.NewBufferString("car")
sample, err := buf.Peek(3)
fmt.Printf("peek=%s err=%v\n", sample, err)
sample[2] = 't' // changes the underlying buffer
data, err := buf.ReadBytes(0)
fmt.Printf("data=%s err=%v\n", data, err)
در اینجا مقدار sample[2] از 'r' به 't' تغییر میکند؛ اما چون sample مستقیماً به محتوای buffer اشاره دارد، خود buffer نیز تغییر میکند. | 142 |
| 16 | 🎖Reflective Iterators
در Go 1.26، package reflect متدهای جدیدی به نامهای Type.Fields و Type.Methods اضافه کرده است که برای پیمایش fieldها و methodهای یک type، iterator برمیگردانند.
برای مثال، میتوان fieldهای یک struct را اینگونه پیمایش کرد:
// List the fields of a struct type.
typ := reflect.TypeFor[http.Client]()
for f := range typ.Fields() {
fmt.Println(f.Name, f.Type)
}
و methodهای آن را نیز به همین شکل:
// List the methods of a struct type.
typ := reflect.TypeFor[*http.Client]()
for m := range typ.Methods() {
fmt.Println(m.Name, m.Type)
}
همچنین دو متد جدید Type.Ins و Type.Outs برای typeهای تابع وجود دارند که iterator مربوط به پارامترهای ورودی و خروجی تابع را برمیگردانند:
typ := reflect.TypeFor[filepath.WalkFunc]()
fmt.Println("Inputs:")
for par := range typ.Ins() {
fmt.Println("-", par.Name())
}
fmt.Println("Outputs:")
for par := range typ.Outs() {
fmt.Println("-", par.Name())
}
در سمت Value نیز متدهای جدید Value.Fields و Value.Methods اضافه شدهاند که iterator مربوط به fieldها و methodهای یک value را برمیگردانند.
نکتهٔ مهم این است که هر iteration همزمان اطلاعات type (StructField یا Method) و خود value را در اختیار قرار میدهد:
client := &http.Client{}
val := reflect.ValueOf(client)
fmt.Println("Fields:")
for f, v := range val.Elem().Fields() {
fmt.Printf("- name=%s kind=%s\n", f.Name, v.Kind())
}
fmt.Println("Methods:")
for m, v := range val.Methods() {
fmt.Printf("- name=%s kind=%s\n", m.Name, v.Kind())
}
روش قدیمی
پیش از Go 1.26، برای بهدستآوردن همین اطلاعات میتوانستید از یک حلقهٔ for-range همراه با متدهای NumX استفاده کنید؛ در واقع iteratorهای جدید نیز در داخل خود همین الگو را پیادهسازی میکنند:
// go 1.25
typ := reflect.TypeFor[http.Client]()
for i := range typ.NumField() {
field := typ.Field(i)
fmt.Println(field.Name, field.Type)
}
در Go 1.26، استفاده از iterator کد را مختصرتر و خواناتر میکند و نیاز به مدیریت index و فراخوانی جداگانهٔ Field(i) یا APIهای مشابه را از بین میبرد.
البته در مقابل، API سطح reflect نیز بزرگتر شده است؛ اما به نظر میرسد این افزایش در API surface با سادگی و خوانایی بیشتر کد قابل توجیه باشد. | 106 |
| 17 | 🎖Goroutine Metrics
متریکهای جدید در package runtime/metrics دید بهتری نسبت به زمانبندی goroutineها (goroutine scheduling) ارائه میکنند:
تعداد کل goroutineهایی که از زمان شروع برنامه ایجاد شدهاند.
تعداد goroutineها در هر وضعیت (state).
تعداد threadهای فعال.
فهرست کامل metricهای جدید:
/sched/goroutines-created:goroutines
Count of goroutines created since program start.
/sched/goroutines/not-in-go:goroutines
Approximate count of goroutines running
or blocked in a system call or cgo call.
/sched/goroutines/runnable:goroutines
Approximate count of goroutines ready to execute,
but not executing.
/sched/goroutines/running:goroutines
Approximate count of goroutines executing.
Always less than or equal to /sched/gomaxprocs:threads.
/sched/goroutines/waiting:goroutines
Approximate count of goroutines waiting
on a resource (I/O or sync primitives).
/sched/threads/total:threads
The current count of live threads
that are owned by the Go runtime.
معنای هر metric را میتوان به این صورت خلاصه کرد:
/sched/goroutines-created
— تعداد goroutineهایی که از زمان شروع برنامه ایجاد شدهاند.
/sched/goroutines/not-in-go
— تعداد تقریبی goroutineهایی که در حال اجرای system call یا cgo call هستند، یا در آنها blocked شدهاند.
/sched/goroutines/runnable
— تعداد تقریبی goroutineهایی که آمادهٔ اجرا هستند، اما در حال اجرا نیستند.
/sched/goroutines/running
— تعداد تقریبی goroutineهایی که در حال اجرا هستند. این مقدار همیشه کمتر از یا مساوی /sched/gomaxprocs:threads است.
/sched/goroutines/waiting
— تعداد تقریبی goroutineهایی که منتظر یک resource، مانند I/O یا sync primitiveها، هستند.
/sched/threads/total
— تعداد فعلی threadهای زندهای که تحت مالکیت Go runtime هستند.
متریکهای مربوط به وضعیت goroutineها میتوانند مستقیماً به برخی مشکلات رایج در production مرتبط شوند.
برای مثال:
افزایش مداوم تعداد waiting میتواند نشانهٔ مشکل lock contention باشد.
مقدار بالای not-in-go نشان میدهد تعداد زیادی goroutine در system callها یا cgo گیر کردهاند.
رشد backlog در runnable میتواند نشاندهندهٔ این باشد که CPUها نمیتوانند حجم تقاضای اجرای کار را همگام با تولید آن پردازش کنند.
مقادیر این metricهای جدید را میتوان مانند سایر metricها با تابع معمول metrics.Read خواند:
func main() {
go work() // omitted for brevity
time.Sleep(100 * time.Millisecond)
printMetric("/sched/goroutines-created:goroutines", "Created")
printMetric("/sched/goroutines:goroutines", "Live")
printMetric("/sched/goroutines/not-in-go:goroutines", "Syscall/CGO")
printMetric("/sched/goroutines/runnable:goroutines", "Runnable")
printMetric("/sched/goroutines/running:goroutines", "Running")
printMetric("/sched/goroutines/waiting:goroutines", "Waiting")
printMetric("/sched/gomaxprocs:threads", "Max")
printMetric("/sched/threads/total:threads", "Live")
}
func printMetric(name string, descr string) {
sample := []metrics.Sample{{Name: name}}
metrics.Read(sample)
fmt.Printf(" %s: %v\n", descr, sample[0].Value.Uint64())
}
یک نکتهٔ مهم برای تحلیل این metricها وجود دارد:
مقادیر مربوط به وضعیتهای مختلف goroutine، یعنی:
not-in-go + runnable + running + waiting
الزاماً برابر با تعداد goroutineهای زنده نیستند
(/sched/goroutines:goroutines)؛
این metric از Go 1.16 در دسترس بوده است.
همچنین تمام metricهای جدید از counterهای نوع uint64 استفاده میکنند. | 116 |
| 18 | 🔵 عنوان مقاله
Sloc, Cloc and Code (scc) 4.0: A Fast Accurate 'Code Counter'
🟢 خلاصه مقاله:
نسخه ۴.۰ ابزار Sloc, Cloc و Code (scc) یک ابزار سریع و دقیق برای شمارش خطوط کد است که امکان برآورد میزان پیچیدگی کد را در بسیاری از زبانهای برنامهنویسی فراهم میکند. این ابزار به توسعهدهندگان کمک میکند تا در کوتاهترین زمان، تعداد خطوط کد پروژههای خود را محاسبه و تحلیل کنند، کار که قبلاً نیازمند صرف زمان و نیروی زیادی بود. با قدرت و سرعت بالای این نسخه، میتوان به راحتی حجم کدهای بزرگ و چندزبانه را بررسی و مدیریت کرد، که برای تیمهای توسعه بسیار ارزشمند است.
این ابزار به طور خاص برای کسانی طراحی شده است که نیازمند سرعت و دقت در ارزیابی پروژههای نرمافزاری هستند. با استفاده از سطوح مختلف تحلیل، میتوان میزان پیچیدگی را بر اساس تعداد خطوط، فایلها یا زبانهای متفاوت تخمین زد. همچنین، این نسخه جدید امکانات بیشتری برای جامعتر بودن گزارشها و سازگاری با زبانهای برنامهنویسی مختلف دارد، که آن را به ابزاری کامل و کاربردی تبدیل کرده است.
در مجموع، نسخه ۴.۰ ابزار scc برای برنامهنویسان، مدیران پروژه و همه افرادی که در حوزه توسعه نرمافزار فعالیت میکنند، ابزاری ضروری است که نه تنها فرآیند شمارش و تحلیل کد را تسهیل میکند، بلکه باعث افزایش بهرهوری و تصمیمگیری بهتر در روند توسعه میشود. با این ابزار، مدیریت کدهای پروژههای بزرگ به شکل موثرتری امکانپذیر خواهد بود، و میزان تحلیل و ارزیابی پروژهها بهبود مییابد.
#کد #برنامهنویسی #تحلیل_کد #ابزارهای_توسعه
🟣لینک مقاله:
https://github.com/boyter/scc
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 166 |
| 19 | 🔵 عنوان مقاله
Go 1.27 interactive tour
🟢 خلاصه مقاله:
در حال حاضر، نسخه ۱.۲۷ زبان برنامهنویسی گو، یک تور تعاملی را ارائه میدهد که به صورت جامع و کامل، جزئیات فنی و بهروزرسانیهای عملی آن را پوشش میدهد. این تور، فرصتی عالی برای توسعهدهندگان است تا با ویژگیهای جدید و بهبودهای قابل توجه در این نسخه آشنا شوند و نحوه بهرهبرداری بهتر از قابلیتهای آن را بیاموزند. با استفاده از این راهنمای تعاملی، کاربران میتوانند به صورت گام به گام، مهارتهای خود را در استفاده از این نسخه ارتقاء دهند و کاربردهای عملی آن را بهتر درک کنند، که نهایتاً به افزایش بهرهوری و کارایی در پروژههایشان کمک خواهد کرد.
نسخه ۱.۲۷ گو به عنوان یکی از بهروزرسانیهای مهم، تغییرات قابل توجهی در زمینههایی مانند بهینهسازی عملکرد، امنیت و امکانات توسعهدهندگان داشته است. این تور تعاملی، فضا را برای یادگیری عملی فراهم میآورد و اطمینان میدهد که کاربران تمامی جنبههای جدید را به خوبی بفهمند و بتوانند آنها را به صورت مؤثر در پروژههای خود پیادهسازی کنند. به این ترتیب، این راهنمای تعاملی فرصت مناسبی است تا هم مبتدیان و هم توسعهدهندگانی که قصد ارتقاء مهارتهای خود را دارند، به سرعت و به راحتی با تغییرات نسخه جدید آشنا شوند و به روز باشند.
در کل، این تور تعاملی، یک ابزار ارزشمند است که ضمن ارائه اطلاعات کامل و بهروزرسانیهای جامع، نقش مهمی در تسهیل فرآیند یادگیری و بهبود کارایی توسعهدهندگان دارد. با بهرهگیری از این راهنمای عملی، کاربران میتوانند پایههای دانش خود را قویتر کنند و از فناوریهای جدید به بهترین شکل بهرهمند شوند، و در نهایت، پروژههای موفقتری را رقم بزنند.
#برنامهنویسی #گو #بهروزرسانی #توسعهدهندگان
🟣لینک مقاله:
https://victoriametrics.com/blog/go-1-27/
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 178 |
| 20 | 🔵 عنوان مقاله
deep dive into the select statement
🟢 خلاصه مقاله:
در این مقاله، به بررسی دقیق و جامع مفهوم دستور SELECT در زبان برنامهنویسی Golang میپردازیم. این دستور یکی از رکنهای اصلی در کار با پایگاههای داده است و شناخت کامل آن برای توسعهدهندگان ضروری است. در ابتدا، توضیح میدهیم که چگونه SELECT به ما امکان میدهد دادههای مورد نیاز خود را از دیتابیسها استخراج کنیم و نقش آن در برنامههای کاربردی چیست. سپس، به جزئیات مربوط به نحوه نوشتن و استفاده صحیح از این دستور، از جمله فیلتر کردن، مرتبسازی و محدود کردن نتایج، میپردازیم. مقاله با تمرکز بر نکات کلیدی و ترفندهای عملی، راهنمای جامعی برای توسعهدهندگان فراهم میآورد تا بتوانند به بهترین شکل از این ابزار قدرتمند بهرهمند شوند.
در نهایت، با تمرکز بر مثالهای عملی و نکات کاربردی، کاربران میآموزند چگونه دستورات SELECT را در پروژههای خود به کار ببرند و مشکلات رایج هنگام استفاده از آن را حل کنند. این مطالعه، یک مرجع ارزشمند برای همهی برنامهنویسان Golang است که میخواهند مهارتهای خود در کار با پایگاه دادهها را ارتقا دهند و به عنوان توسعهدهندهای ماهر در این حوزه شناخته شوند.
#گولنگ #پایگاهداده #برنامهنویسی #توسعه
🟣لینک مقاله:
https://www.youtube.com/watch?v=fH5hoZJL_tQ&list=PLGZGLmEvGK8I&index=19
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 182 |
