ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 9 · 5లో పాఠం 5కోర్సులో 45/50~10 min
మాడ్యూల్ పాఠాలు (5/5)

అడ్డంకులు మరియు ట్యాగ్‌లను రూపొందించండి

బిల్డ్ అడ్డంకులు (బిల్డ్ ట్యాగ్‌లు అని కూడా పిలుస్తారు) OS, ఆర్కిటెక్చర్, గో వెర్షన్ లేదా కమాండ్ లైన్‌లో పాస్ చేసిన కస్టమ్ ట్యాగ్‌ల ఆధారంగా ** ఫైల్ యొక్క కంపైలేషన్**కి గేట్ చేయండి. అవి క్రాస్-ప్లాట్‌ఫారమ్ కోడ్, ఆప్ట్-ఇన్ హెవీ టెస్ట్ ఫైల్‌లు మరియు ఇలాంటి దృశ్యాల కోసం ఉపయోగించబడతాయి.

ఆధునిక సింటాక్స్: //go:build

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 ప్రారంభించబడితే నిజం.

క్రాస్-ప్లాట్‌ఫారమ్: ఫైల్ పేరు కన్వెన్షన్

స్పష్టమైన ట్యాగ్‌లకు అతీతంగా, గో ఫైల్ పేరు ప్రత్యయాలను అవ్యక్త నిర్మాణ పరిమితులుగా గుర్తిస్తుంది:

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లోడ్ అవుతోంది...

ఫైల్ ఎగువన Linuxలో మాత్రమే కంపైల్ చేసే బిల్డ్ పరిమితిని జోడించండి. ప్యాకేజీకి ముందు ఖాళీ లైన్ గుర్తుంచుకోండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

//go:build వ్యాఖ్య ప్యాకేజీకి ముందు, ఒక లైన్‌లో, దాని తర్వాత ఖాళీ పంక్తితో ఉంటుంది.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#go.m9.l5.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

విండోస్‌ను మినహాయించే నిర్మాణ పరిమితిని జోడించండి (నిరాకరణ ఆపరేటర్‌ని ఉపయోగించండి!).

ఎడిటర్ లోడ్ అవుతోంది…

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

Quiz#go.m9.l5.e3
సిద్ధంగా ఉంది

పరీక్ష సమయంలో ప్రారంభించడానికి అనుకూల 'ఇంటిగ్రేషన్' ట్యాగ్ //go:build ఇంటిగ్రేషన్‌తో ప్రకటించబడింది, మీరు ఏ ఫ్లాగ్‌ని ఉపయోగిస్తున్నారు?

Go
$ go test -tags=???
సమాధాన ఎంపికలు