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

آنالیز کنندههای داخلی
go tool vet help
ابتدا انواع کمتر بدیهی را بررسی میکنیم تا درک بهتری از آنها به دست آوریم.
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 –ی نشود:
Stdmethods
آنالیزکننده stdmethods این اطمینان را حاصل میکند که متدهایی که از اینترفیسهای کتابخانه استاندارد پیادهسازی شدهاند، به خوبی با آن چه انتظار داریم سازگار هستند:
Structtag
آنالیز کنندههای سفارشی
با این که آنالیزکنندههای داخلی کاملاً قدرتمند و مفید هستند، اما Go امکان ساخت آنالیز کنندههای سفارشی را نیز فراهم ساخته است.
برای نمونه میتوانیم از آنالیزکنندههای سفارشی برای تشخیص کاربرد پکیج context در آرگومانهای تابع استفاده کنید. بدین ترتیب زمانی که آنالیز کننده سفارشی آماده شد میتوانید از آن مستقیماً در دستور Vet استفاده کنید.
go install github.com/blanchonvincent/ctxarg go vet -vettool=$(which ctxarg)
حتی میتوان یک ابزار آنالیز سفارشی نیز ساخت.
دستور آنالیز سفارشی
از آنجا که آنالیز کنندهها به طور کامل مجزا از دستورها هستند، میتوان دستور خاصی را به همراه آنالیز کننده مورد نیاز ساخت. در ادامه مثالی از یک دستور سفارشی را میبینید که تنها از برخی آنالیزکنندههای مورد نیاز استفاده میکند:
ساخت و اجرای این دستور به ما ابزاری بر مبنای آنالیزکنندههای منتخب میدهد:
./custom-vet help custom-vet is a tool for static analysis of Go programs. Registered analyzers: atomic check for common mistakes using the sync/atomic package ctxarg check for parameters order while receiving context as parameter loopclosure check references to loop variables from within nested functions
همچنین میتوانید مجموعه سفارشی از آنالیز کنندهها را ایجاد کرده و آنها را با آنالیز کنندههای داخلی که دوست دارید ترکیب کنید تا یک دستور سفارشی به دست بیاورید که با گردش کار و استاندارد کدنویسی خاص شما در شرکتتان مطابقت دارد.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش توسعه وب با زبان برنامه نویسی Go
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- زبان برنامهنویسی Go — راهنمای شروع به کار
- پکیجهای زبان برنامهنویسی Go — از صفر تا صد
==
مطالب مجله فرادرس را در جستجوی گوگل سریعتر ببینید













