ماڈیول اسباق (5/5)
رکاوٹیں اور ٹیگز بنائیں
تعمیر کی رکاوٹیں (جسے بلڈ ٹیگز بھی کہا جاتا ہے) OS، فن تعمیر، گو ورژن یا کمانڈ لائن پر پاس کردہ کسٹم ٹیگز پر مبنی فائل کی تالیف کو گیٹ کرتا ہے۔ وہ کراس پلیٹ فارم کوڈ، آپٹ ان ہیوی ٹیسٹ فائلوں اور اسی طرح کے منظرناموں کے لیے استعمال ہوتے ہیں۔
جدید نحو: //go:build
چونکہ Go 1.17+ کینونیکل فارمیٹ خصوصی //go:build تبصرہ ہے، جو فائل کے اوپری حصے میں package سے پہلے، خود ایک لائن پر، اس کے بعد ایک خالی لائن:
//go:build linux
package main
// this file is built ONLY on Linuxتین مطلق اصول:
- تبصرہ
packageسے پہلے ظاہر ہونا چاہیے۔ - اس کے بعد ایک خالی لائن ہونی چاہیے۔
//اورgo:buildکے درمیان کوئی جگہ نہیں ہے (یہ ایک نحوی محرک ہے، نہ صرف کوئی تبصرہ)۔
بولین تاثرات
//go:build کے بعد کا اظہار منطقی آپریٹرز کو قبول کرتا ہے:
//go:build linux && amd64 // both conditions
//go:build linux || darwin // any one (Unix-like)
//go:build !windows // negation
//go:build (linux || darwin) && !arm64
//go:build go1.22 // Go version ≥ 1.22
//go:build integration // custom tag (see below)سب سے عام بلٹ ان ٹیگز:
- OS:
linux,darwin,windows,freebsd,js... - فن تعمیر:
amd64,arm64,386,wasm... - ورژن پر جائیں:
go1.20,go1.22... (سچ ہے اگر ورژن ** ہے ≥**)۔ cgo: درست ہے اگر cgo فعال ہے۔
کراس پلیٹ فارم: فائل نام کنونشن
واضح ٹیگز کے علاوہ، Go فائل نام کے لاحقوں کو مضمر تعمیراتی رکاوٹوں کے طور پر تسلیم کرتا ہے:
db_linux.go // linux only
db_windows.go // windows only
db_linux_amd64.go // linux/amd64 only
یہ ایک ہی انٹرفیس کے پلیٹ فارم پر منحصر نفاذ کے لیے محاوراتی نمونہ ہے (ہر فائل مختلف کوڈ کے ساتھ ایک جیسے افعال کی وضاحت کرتی ہے)۔
حسب ضرورت ٹیگز: بھاری ٹیسٹوں کا انتخاب کرنا
حسب ضرورت ٹیگز کوئی بھی شناخت کنندہ ہیں جنہیں آپ کمانڈ لائن پر منتقل کرتے ہیں:
//go:build integration
package mypkg
// tests that need a real DB, run only on demandعملدرآمد:
go test -tags=integration ./...-tags=integration کے بغیر، فائل مرتب کرنے والے کے لیے پوشیدہ ہے (اس کے اندر موجود ٹیسٹ go test کے لیے موجود نہیں ہیں)۔ یونٹ ٹیسٹ (ہمیشہ) کو انضمام ٹیسٹوں سے الگ کرنے کا یہ کینونیکل طریقہ ہے (مطالبہ پر، شاید صرف CI میں)۔
پرانا نحو: // +build (فرسودہ)
1.17 سے پہلے فارمیٹ // +build linux تھا (اسپیس کو نوٹ کریں، اور یہ کہ یہ +build ہے، go:build نہیں)۔ یہ اب بھی پسماندہ مطابقت کے لیے تعاون یافتہ ہے، لیکن Go 1.17+ میں gofmt دونوں کو شامل کرتا ہے جب اسے صرف پرانا ملتا ہے:
//go:build linux
// +build linux
package mainنئی فائلوں کے لیے صرف جدید //go:build فارم استعمال کریں۔
مشقیں
فائل کے اوپری حصے میں تعمیراتی رکاوٹ شامل کریں جو اسے صرف لینکس پر مرتب کرتی ہے۔ پیکیج سے پہلے خالی لائن کو یاد رکھیں۔
اشارہ دکھائیں۔
//go:build تبصرہ پیکیج سے پہلے، خود ایک لائن پر، اس کے بعد ایک خالی لائن ہوتی ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
ایک تعمیراتی رکاوٹ شامل کریں جو ونڈوز کو خارج کر دے (نفی آپریٹر کا استعمال کریں!)۔
3 کوششوں کے بعد حل دستیاب ہے۔
آزمائشی وقت پر ایک حسب ضرورت 'انٹیگریشن' ٹیگ کو فعال کرنے کے لیے //go:build integration کے ساتھ اعلان کیا گیا، آپ کون سا پرچم استعمال کرتے ہیں؟
$ go test -tags=???