4.1 آموزش Build پروژه

4.1 آموزش Build پروژه

برای build یک پروژه شما باید از کامند go build استفاده کنید که این کامند دارای یکسری سوییچ می باشد که در زیر ما معرفی خواهیم کرد.

4.1.1 نحوه build یک فایل گو #

معمولا شما باید برای build فایلی که دارای package main هست را برای build استفاده کنید مانند مثال زیر :

1$ go build main.go

پس از build در محل همان فایل یک فایل با نام main ایجاد می شود.

اگر فایل main شما در روت پروژه باشد نیازی نیست به دستور go build نام فایل را بدهید کافیه مانند دستور زیر پروژه را build کنید.

1$ go build .

خروجی یک فایل با نام پروژه ایجاد می شود.

4.1.2 استفاده از gcflags برای build #

همانطور که گفتیم کامند build دارای یکسری سوییچ می باشد که یکی از سوییچ هایش gcflags می باشد که می توانید هنگام build یکسری اطلاعات مربوط به دیباگ به فایل خروجی اضافه می شود.

1$ go build -gcflags "-N -l" main.go

توجه کنید این نوع build گرفتن برای انجام Remote Debugging که در بخش بعدی آموزش می دهیم خیلی کاربردی می باشد.

4.1.3 تعیین نام خروجی فایل, معماری و سیستم عامل #

اگر یادتان باشد در بخش تاریخچه زبان گو یکی از ویژگی های بارزی که در خصوص زبان گو گفتیم بحث Cross-Platform Build بود که شما می توانید در همان سیستم عاملی که هستید برای سایر پلت فرم ها و سیستم عامل ها خروجی بگیرید.

1$ GOOS=linux GOARCH=amd64 go build -o myproject main.go

کامند فوق در لینوکس و سیستم عامل های یونیکسی کاربردی است که شما می توانید قبل از فرمان اصلی یکسری environment variables تعیین کنید. که در کامند فوق ما ۲ تا environment قرار دادیم اولی برای تعیین سیستم عامل هست و دومی معماری هست که ۳۲ بیت یا ۶۴ بیت و همچنین از نوع arm باشد. سپس فرمان go build را قرار دادیم حال خروجی فایل مناسب برای هر سیستم عامل لینوکس با معماری amd64 (۶۴ بیت) می باشد. و در انتهای کامند یک سوییچ o- قرار دادیم که نام خروجی فایل build شده چی باشد.

4.1.4 گرفتن build به همراه race detector #

در فصل سوم یک بخشی داشتیم به نام data race که در خصوصش توضیح دادیم چطور جلوی این اتفاق را در همزمانی بگیریم. حال یک سوییچ در کامند build داریم به نام race- برای تشخیص data race کمک می کند.

1$ go build -race

4.1.5 مقدار دهی متغیر هنگام build #

اما یکی از سوییچ های خیلی جالب در زبان گو هست که هنگام build پروژه می تواند متغیری را در هرجای پروژه مقدار دهی کند و از کاربردهای آن می توان برای تعیین ورژن پروژه و… می باشد.

 1package main
 2
 3import "fmt"
 4
 5var (
 6	Version   string
 7	BuildTime string
 8)
 9
10func main() {
11	fmt.Printf("version %s, build time %s", Version, BuildTime)
12}
1$ go build -ldflags "-X main.Version=1.0.0 -X main.BuildTime=`date -u +%Y-%m-%dT%H:%M:%SZ`" main.go
1$ ./main
2version 1.0.0, build time 2023-01-27T14:19:23Z

در کد فوق ما ۲ متغیر ایجاد کردیم که هنگام build مقدار دهی کنیم و به کامند build ما یک سوییچ ldflags- اضافه کردیم و آدرس متغیرها را جهت مقدار دهی به این کامند داده‌ایم.

توجه کنید اگر متغیرهایتان داخل پکیج (پوشه ای) مانند configs بود آدرس متغییر بصورت زیر می شود :

1$ go build -ldflags "-X configs.Version=1.0.0 -X configs.BuildTime=`date -u +%Y-%m-%dT%H:%M:%SZ`" main.go