مرکزی مواد پر جائیں
ماڈیول 9 · سبق 5 از 5کورس میں 45/50~10 min
ماڈیول اسباق (5/5)

رکاوٹیں اور ٹیگز بنائیں

تعمیر کی رکاوٹیں (جسے بلڈ ٹیگز بھی کہا جاتا ہے) OS، فن تعمیر، گو ورژن یا کمانڈ لائن پر پاس کردہ کسٹم ٹیگز پر مبنی فائل کی تالیف کو گیٹ کرتا ہے۔ وہ کراس پلیٹ فارم کوڈ، آپٹ ان ہیوی ٹیسٹ فائلوں اور اسی طرح کے منظرناموں کے لیے استعمال ہوتے ہیں۔

جدید نحو: //go:build

چونکہ Go 1.17+ کینونیکل فارمیٹ خصوصی //go:build تبصرہ ہے، جو فائل کے اوپری حصے میں package سے پہلے، خود ایک لائن پر، اس کے بعد ایک خالی لائن:

Go
//go:build linux

package main

// this file is built ONLY on Linux

تین مطلق اصول:

  1. تبصرہ package سے پہلے ظاہر ہونا چاہیے۔
  2. اس کے بعد ایک خالی لائن ہونی چاہیے۔
  3. // اور go:build کے درمیان کوئی جگہ نہیں ہے (یہ ایک نحوی محرک ہے، نہ صرف کوئی تبصرہ)۔

بولین تاثرات

//go:build کے بعد کا اظہار منطقی آپریٹرز کو قبول کرتا ہے:

Go
//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 فائل نام کے لاحقوں کو مضمر تعمیراتی رکاوٹوں کے طور پر تسلیم کرتا ہے:

Code
db_linux.go         // linux only
db_windows.go       // windows only
db_linux_amd64.go   // linux/amd64 only

یہ ایک ہی انٹرفیس کے پلیٹ فارم پر منحصر نفاذ کے لیے محاوراتی نمونہ ہے (ہر فائل مختلف کوڈ کے ساتھ ایک جیسے افعال کی وضاحت کرتی ہے)۔

حسب ضرورت ٹیگز: بھاری ٹیسٹوں کا انتخاب کرنا

حسب ضرورت ٹیگز کوئی بھی شناخت کنندہ ہیں جنہیں آپ کمانڈ لائن پر منتقل کرتے ہیں:

Go
//go:build integration

package mypkg

// tests that need a real DB, run only on demand

عملدرآمد:

Bash
go test -tags=integration ./...

-tags=integration کے بغیر، فائل مرتب کرنے والے کے لیے پوشیدہ ہے (اس کے اندر موجود ٹیسٹ go test کے لیے موجود نہیں ہیں)۔ یونٹ ٹیسٹ (ہمیشہ) کو انضمام ٹیسٹوں سے الگ کرنے کا یہ کینونیکل طریقہ ہے (مطالبہ پر، شاید صرف CI میں)۔

پرانا نحو: // +build (فرسودہ)

1.17 سے پہلے فارمیٹ // +build linux تھا (اسپیس کو نوٹ کریں، اور یہ کہ یہ +build ہے، go:build نہیں)۔ یہ اب بھی پسماندہ مطابقت کے لیے تعاون یافتہ ہے، لیکن Go 1.17+ میں gofmt دونوں کو شامل کرتا ہے جب اسے صرف پرانا ملتا ہے:

Go
//go:build linux
// +build linux

package main

نئی فائلوں کے لیے صرف جدید //go:build فارم استعمال کریں۔

مشقیں

ورزش#go.m9.l5.e1
کوششیں: 0لوڈ ہو رہا ہے…

فائل کے اوپری حصے میں تعمیراتی رکاوٹ شامل کریں جو اسے صرف لینکس پر مرتب کرتی ہے۔ پیکیج سے پہلے خالی لائن کو یاد رکھیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

//go:build تبصرہ پیکیج سے پہلے، خود ایک لائن پر، اس کے بعد ایک خالی لائن ہوتی ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m9.l5.e2
کوششیں: 0لوڈ ہو رہا ہے…

ایک تعمیراتی رکاوٹ شامل کریں جو ونڈوز کو خارج کر دے (نفی آپریٹر کا استعمال کریں!)۔

ایڈیٹر لوڈ ہو رہا ہے…

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m9.l5.e3
تیار

آزمائشی وقت پر ایک حسب ضرورت 'انٹیگریشن' ٹیگ کو فعال کرنے کے لیے //go:build integration کے ساتھ اعلان کیا گیا، آپ کون سا پرچم استعمال کرتے ہیں؟

Go
$ go test -tags=???
جواب کے اختیارات