دستور Vet در Go در زمان کدنویسی یک کمک بسیار بزرگ محسوب می‌شود. این دستور به تشخیص هر گونه کد مشکوک، غیرمعمول و بی‌استفاده در اپلیکیشن کمک می‌کند. دستور Vet در واقع از چند آنالیز کننده دیگر تشکیل یافته است و حتی می‌تواند با آنالیز کننده سفارشی شما نیز کار کند. در ادامه ابتدا آنالیز کننده داخلی را بررسی می‌کنیم.

آنالیز کننده‌های داخلی

فهرست آنالیز کننده‌های داخلی این زبان در این صفحه (+) موجود است. همچنین با اجرای دستور زیر، می‌توانید آن‌ها را مشاهده کنید:

ابتدا انواع کمتر بدیهی را بررسی می‌کنیم تا درک بهتری از آن‌ها به دست آوریم.

Atomic

این آنالیز کننده از کاربرد غیرمعمول تابع atomic جلوگیری می‌کند.

متغیر a به لطف تابع‌های ابتدایی حافظه atomic یعنی addInt که concurrent-safe است، افزایشی است. با این حال نتیجه را به همان متغیر انتساب می‌دهیم که عملیات نوشتن به صورت concurrent-safe نیست. این یک اشتباه از روی بی‌دقتی است که از سوی آنالیز کننده atomic تشخیص داده می‌شود.

Copylocks

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

یک struct که از قفل استفاده می‌کند، باید از سوی اشاره‌گر استفاده شود تا حالت درونی سازگار باقی بماند:

Loopclosure

زمانی که یک goroutine جدید را اجرا می‌کنید، goroutine اصلی همچنان به اجرای خود ادامه می‌دهد. کد goroutine و متغیرهای آن در زمان اجرا ارزیابی خواهند شد و بدین ترتیب می‌تواند منجر به برخی اشتباه‌های رایج شود که در آن متغیر در حالی که هنوز در حال به‌روزرسانی از سوی goroutine اصلی است، مورد استفاده قرار گیرد:

Lostcancel

ایجاد یک context به صورت cancellable از context اصلی موجب بازگشت context جدید به همراه یک تابع می‌شود که می‌تواند این context را لغو کند. این تابع می‌تواند هر زمان برای لغو کردن همه عملیات‌های مرتبط با این context مورد استفاده قرار گیرد، اما باید همواره طوری فراخوانی شود که منجر به نشت هیچ context –ی نشود:

اگر به جزییات بیشتری در مورد context نیاز دارید، مشتقات احتمالی آن و نقش تابع cancel در این مقاله (+) به طور تفصیلی مورد بررسی قرار گرفته است.

Stdmethods

آنالیزکننده stdmethods این اطمینان را حاصل می‌کند که متدهایی که از اینترفیس‌های کتابخانه استاندارد پیاده‌سازی شده‌اند، به خوبی با آن چه انتظار داریم سازگار هستند:

Structtag

تگ‌ها رشته‌هایی در struct هستند که باید از قاعده تعریف شده در پکیج reflect (+) پیروی کنند. حتی وجود یک فاصله اضافی موجب می‌شود که تگ معتبر نباشد و بدین ترتیب بدون وجود دستور vet دیباگ کردن آن به کاری دشوار تبدیل می‌شود:

در این بخش برخی از آنالیزکننده‌های دستور Vet را مورد بررسی قرار دادیم، اما این فهرست شامل همه موارد نبود. برای مشاهده فهرست جامعی از این آنالیز کننده‌ها می‌توانید به صفحه این دستور (+) در مستندات زبان Go مراجعه کنید. اما توجه داشته باشید که حتی این فهرست نیز همه قدرت این دستور را نمایش نمی‌دهد. قدرت اصلی این دستور در امکان تعریف کردن آنالیز کننده‌های سفارشی است که در بخش بعدی مورد بررسی قرار می‌دهیم.

آنالیز کننده‌های سفارشی

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

برای نمونه می‌توانیم از آنالیزکننده‌های سفارشی برای تشخیص کاربرد پکیج context در آرگومان‌های تابع استفاده کنید. بدین ترتیب زمانی که آنالیز کننده سفارشی آماده شد می‌توانید از آن مستقیماً در دستور Vet استفاده کنید.

حتی می‌توان یک ابزار آنالیز سفارشی نیز ساخت.

دستور آنالیز سفارشی

از آنجا که آنالیز کننده‌ها به طور کامل مجزا از دستورها هستند، می‌توان دستور خاصی را به همراه آنالیز کننده مورد نیاز ساخت. در ادامه مثالی از یک دستور سفارشی را می‌بینید که تنها از برخی آنالیزکننده‌های مورد نیاز استفاده می‌کند:

ساخت و اجرای این دستور به ما ابزاری بر مبنای آنالیزکننده‌های منتخب می‌دهد:

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

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

میثم لطفی (+)

«میثم لطفی» دانش‌آموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار نیز با مجله فرادرس همکاری دارد.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *