Go با معرفی دایرکتوری $GOPATH
روش منحصر به فردی برای مدیریت فایل های حاوی کد دارد. در این مسیر تمام کدهای مرتبط با go در سیستم شما قرار گرفته است. توجه داشته باشید که این دایرکتوری با متغیر محیطی $GOROOT
، که مشخص میکند go در چه مسیری نصب شده است، تفاوت دارد. قبل از اینکه از این زبان برای برنامهنویسی استفاده کنیم باید متغیر $GOPATH
را تعریف کنیم. در سیستمهای شبه یونیکس (*nix) فایلی به نام .profile
وجود دارد که باید دستور زیر را به انتهای این فایل اضافه کنیم. مفهوم استفاده از gopath یک مفهوم جدید محسوب می شود که طی آن، هر کد go را می توان در هر زمان و بدون هیچ گونه ابهامی لینک نمود.
در ورژن go 1.8 به بعد، اگر متغیر محیطی GOPATH تنظیم نشود، یک مقدار پیش فرض برای آن در نظر گرفته می شود که در یونیکس مقدار $HOME/go
و در ویندوز مقدار %USERPROFILE%/go
را دارد.
در سیستمهای شبه یونیکسی، این متغیر را میتوان به صورت زیر مورد استفاده قرار داد: export GOPATH=${HOME}/mygo
در ویندوز، ابتدا باید یک متغیر محیطی به نام GOPATH ایجاد کنید، که با مقدار c:\mygo
مقداردهی شده باشد. ( این مقدار بستگی به این دارد که فضای کاری شما در کجا قرار گرفته باشد )
طبیعتا مشکلی ندارد که در فضای کاری شما، بیشتر از یک مقدار برای $GOPATH
در نظر گرفته شود، فقط توجه داشته باشید که با استفاده از :
این مقادیر را از هم مجزا کنید (در ویندوز باید از ;
استفاده کنید). در این حالت، دستور go get
محتوای اولین مسیر شما را در $GOPATH
قرار می دهد. معمولا توصیه میشود که از نصب ورژنهای متعدد Go خودداری شود. در برترین حالت ممکن است فولدری با نام پروژه خود در مسیر $GOPATH
ایجاد کنید، که باعث میشود همه چیز به هم بریزد. چون وقتی در مسیر $GOPATH
پوشه ای ساخته می شود، آن پوشه را به عنوان یک پکیج/بسته می شناسد. بنابراین وقتی از دستور go get
استفاده میکنید، دنبال بسته ای هم نام با فولدر شما میگردد و طبیعتا آن را پیدا نمیکند. پس لطفا از قراردادهای تعریف شده برای برنامهنویسی پیروی کنید چون حتما برای تعریف هر یک از آن ها دلیلی وجود داشته است.
در $GOPATH
، شما باید سه فولدر به صورت زیر داشته باشید:
src
برای سورس فایلهایی که پسوند .go، .c، .g، .s دارند.pkg
برای فایلهای کامپایل شده ای که پسوند .a دارند.bin
برای فایلهای اجرایی.
در این کتاب، ما از mygo
به عنوان تنها مقداری که در متغیر $GOPATH
قرار گرفته استفاده می کنیم.
برای ایجاد سورس فایلها و فولدرهای خود از مسیری مانند $GOPATH/src/mymath/sqrt.go
استفاده کنید به طوری که mymath
در واقع نام بسته شما محسوب میشود. ( شما ممکن است نام بسته خود را mymath
بگذارید و در عین حال دقیقا همین نام را برای پوشه یا فایلهای بسته در نظر بگیرید )
هر زمان که بسته ای ایجاد میکنید، باید پوشهای در مسیر src
برای این پکیج در نظر بگیرید، که البته توجه داشته باشید پکیج main
یک استثناء محسوب میشود، چون ساخت پوشهای برای main
در واقع امری اختیاری است و اجباری ندارد. معمولا نام پوشهها همنام با نام بستهای در نظر گرفته میشود که میخواهید از آن استفاده کنید. همچنین در صورت لزوم میتوانید از دایرکتوریهای چندسطحی استفاده کنید. برای مثال، اگر دایرکتوری $GOPATH/src/github.com/astaxie/beedb
را ایجاد کردهاید، آنگاه مسیر بستهی شما به صورت github.com/astaxie/beedb
خواهد بود. نام بسته درواقع آخرین دایرکتوری در این مسیر میباشد که در این مثال beedb
است.
دستورات زیر را اجرا کنید.
cd $GOPATH/src
mkdir mymath
یک فایل جدید با نام sqrt.go
ایجاد کرده و متن زیر را در این فایل قرار دهید.
// Source code of $GOPATH/src/mymath/sqrt.go
package mymath
func Sqrt(x float64) float64 {
z := 0.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2 * x)
}
return z
}
بدین ترتیب دایرکتوری بستهی من ایجاد شده و کدهای مرتبط با آن هم بررسی کردیم. توصیه میکنیم که از همان نامی که برای بسته استفاده میکنید برای دایرکتوری مرتبط با آن استفاده کنید، به طوری که دایرکتوری شما تمام سورس فایلهای مربوط به آن بسته را در خود دارد.
همانطور که در بالا عنوان شد، بستهای را ایجاد کردیم. اما سوال اینجاست که چطور این بسته را برای کارهای عملی کامپایل کنیم؟ برای این کار دو روش زیر وجود دارند:
- به مسیر پکیج رفته و دستور
go install
را اجرا کنید. - دستور فوق را به همراه نام فایل اجرا کنید، مثلا
go install mymath
.
بعد از اینکه کامپایل انجام شد، می توان به مسیر زیر رفت و تغییرات را مشاهده کرد.
cd $GOPATH/pkg/${GOOS}_${GOARCH}
// فایل زیر بعد از کامپایل ایجاد شده است
mymath.a
فایل که پسوند .a
دارد، در واقع همان فایل باینری مربوط به بستهی ما میباشد. چطور از این فایل استفاده کنیم؟
به نظر میرسد که برای استفاده از این فایل باید یک اپلیکیشن ایجاد کنیم.
برای این کار یک پکیج اپلیکیشن با نام mathapp
ایجاد کنید.
cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go
در فایل main.go دستورات زیر را قرار دهید.
//$GOPATH/src/mathapp/main.go source code.
package main
import (
"mymath"
"fmt"
)
func main() {
fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
}
برای کامپایل این برنامه، باید به مسیر این بسته یعنی $GOPATH/src/mathapp
رفته و دستور go install
را اجرا کنید. بعد از کامپایل، یک فایل اجرایی با نام mathapp
در دایرکتوری $GOPATH/bin/
ایجاد میشود. برای اجرای این برنامه، از دستور ./mathapp
استفاده کنید. بعد از اجرای این دستور، عبارت زیر در ترمینال شما نمایش داده میشود.
Hello world. Sqrt(2) = 1.414213562373095
Go has a tool for installing remote packages, which is a command called go get
. It supports most open source communities, including GitHub, Google Code, BitBucket, and Launchpad.
go get github.com/astaxie/beedb
You can use go get -u …
to update your remote packages and it will automatically install all the dependent packages as well.
This tool will use different version control tools for different open source platforms. For example, git
for GitHub and hg
for Google Code. Therefore, you have to install these version control tools before you use go get
.
After executing the above commands, the directory structure should look like following.
$GOPATH
src
|-github.com
|-astaxie
|-beedb
pkg
|--${GOOS}_${GOARCH}
|-github.com
|-astaxie
|-beedb.a
Actually, go get
clones source code to the $GOPATH/src
of the local file system, then executes go install
.
You can use remote packages in the same way that we use local packages.
import "github.com/astaxie/beedb"
If you've followed all of the above steps, your directory structure should now look like the following.
bin/
mathapp
pkg/
${GOOS}_${GOARCH}, such as darwin_amd64, linux_amd64
mymath.a
github.com/
astaxie/
beedb.a
src/
mathapp
main.go
mymath/
sqrt.go
github.com/
astaxie/
beedb/
beedb.go
util.go
Now you are able to see the directory structure clearly; bin
contains executable files, pkg
contains compiled files and src
contains package source files.
(The format of environment variables in Windows is %GOPATH%
, however this book mainly follows the Unix-style, so Windows users need to replace these yourself.)
- فهرست مطالب
- بخش قبلی: نصب
- بخش بعدی: دستورات Go