152 lines
5.6 KiB
Markdown
152 lines
5.6 KiB
Markdown
# 1.2 $GOPATH ve Çalışma Ortamı
|
||
|
||
## $GOPATH
|
||
|
||
Go komutları, önemli bir ortam değişkeni olan $GOPATH üzerinden çalışır. Bu değişkeni Go'nun kurulu olduğu dizini veren $GOROOT ile karıştırmayın. Bu değişken bilgisayarınızdaki Go çalışma ortamının hangi dizinde olduğunu gösterir (Aşağıdaki dizin yapısı örnek olarak verilmiştir, siz kendinize göre dizin yolunu değiştirebilirsiniz).
|
||
|
||
Unix türevi işletim sistemlerinde, aşağıdaki komutla değişkeni ayarlayabilirsiniz:
|
||
|
||
export GOPATH=/home/apple/mygo
|
||
|
||
Windows'da ise, GOPATH adında bir ortam değişkeni oluşturup, değerini `c:\mygo` ( ***ya da sizin istediğiniz herhangi bir yer*** ) olarak atayabilirsiniz.
|
||
|
||
$GOPATH içinde birden fazla dizin yolu(çalışma ortamı) olabilir, dizinleri `:` ayırabilirsiniz(Windows'da`;`). Birden fazla çalışma ortamınız var ise `go get` indirdiği içeriği $GOPATH'teki ilk dizine yazacaktır.
|
||
|
||
$GOPATH içinde aşağıdaki üç dizinden oluşur:
|
||
|
||
- `src` -> kaynak dosyalar için(.go, .c vb uzantılı)
|
||
- `pkg` -> derlenmiş dosyalar için(.a uzantılı)
|
||
- `bin` -> çalıştırılabilir dosyalar için
|
||
|
||
Bu kitapta, `mygo` dizini $GOPATH'in gösterdiği çalışma ortamı olacak.
|
||
|
||
## Paket dizinleri
|
||
|
||
Paket ve kaynak dosyaları `$GOPATH/src/mymath/sqrt.go` şeklinde oluşturun (`mymath` paketin ismidir) ( ***`mymath` paket ismi değişebilir, fakat paket ismi ve paketleri oluşturan kaynak kodların bulunduğu dizinin ismi aynı olmalıdır***)
|
||
|
||
Her paket için `src` altında yeni bir dizin oluşturmalısınız. Dizin isimleri genelde paket ismiyle aynı olur/olmalıdır. Paket oluştururken iç içe dizinler açabilirsiniz. Örneğin, eğer `$GOPATH/src/github.com/astaxie/beedb` dizini oluşturursanız, paket yolu `github.com/astaxie/beedb` olacaktır. Paket ismi ise en son dizinin ismi olacaktır, önceki örnekte `beedb` paket ismi olacaktır.
|
||
|
||
Terminalinizde aşağıdaki komutları çalıştırın. ( ***Bu kısımda örneklerden bahsedeceğiz*** )
|
||
|
||
cd $GOPATH/src
|
||
mkdir mymath
|
||
|
||
`sqrt.go` isminde bir dosya oluşturun, aşağıdaki kod bloğunu ekleyin.
|
||
|
||
//$GOPATH/src/mymath/sqrt.go kaynak kodu
|
||
package mymath
|
||
|
||
func Sqrt(x float64) float64 {
|
||
z := 0.0
|
||
for i := 0; i < 1000; i++ {
|
||
z -= (z*z - x) / (2 * x)
|
||
}
|
||
return z
|
||
}
|
||
|
||
Yukarıdaki adımların sonunda ilk paketimizi oluşturmuş olduk. Paket isimlerinin bulundukları dizinin adı ile aynı olmasına özen gösterin.
|
||
|
||
## Paketleri derleme
|
||
|
||
Yukarıda ilk paketimizi oluşturmuştuk, peki projelerimizde kullanmak için nasıl derleyeceğiz? İki şekilde yapabiliriz:
|
||
|
||
1. Paket dizinin içindeyken `go install` komutunu çalıştırarak.
|
||
2. Herhangi bir dizindeyken `go install mymath` komutunu çalıştırarak.
|
||
|
||
Derleme işlemi bittikten sonra, aşağıdaki komutları çalıştırırsanız.
|
||
|
||
cd $GOPATH/pkg/${GOOS}_${GOARCH}
|
||
// derlenmiş halinin oluştuğunu görebilirsiniz
|
||
mymath.a
|
||
|
||
`.a` uzantılı dosya paketimizin binary halini içeriyor. Peki bu dosyayı nasıl kullanacağız?
|
||
|
||
Öncelikle yeni bir uygulama oluşturmalıyız.
|
||
|
||
`mathapp` adında yeni bir uygulama oluşturun.
|
||
|
||
cd $GOPATH/src
|
||
mkdir mathapp
|
||
cd mathapp
|
||
vim main.go
|
||
|
||
Kaynak kod:
|
||
|
||
//$GOPATH/src/mathapp/main.go
|
||
package main
|
||
|
||
import (
|
||
"mymath"
|
||
"fmt"
|
||
)
|
||
|
||
func main() {
|
||
fmt.Printf("Merhaba, dünya. Sqrt(2) = %v\n", mymath.Sqrt(2))
|
||
}
|
||
|
||
Uygulamyı derlemek için, `$GOPATH/src/mathapp` dizinine geçip, `go install` komutunu çalıştırın. `$GOPATH/bin/` altında `mathapp` dizinin oluştuğunu göreceksiniz. Uygulamanızı çalıştırmak için, `./mathapp` komutunu çalıştırın. Aşağıdaki gibi bir çıktı alıyor olmanız lazım.
|
||
|
||
Merhaba, dünya. Sqrt(2) = 1.414213562373095
|
||
|
||
## Üçüncü-parti paketleri kurmak
|
||
|
||
Üçüncü-parti paketleri kurmak için `go get` komutunu kullanabilirsiniz. Bir çok açık-kaynak platformu destekliyor; GitHub, Google Code, BitBucket, ve Launchpad.
|
||
|
||
go get github.com/astaxie/beedb
|
||
|
||
`go get -u …` kullanarak var olan paketlerinizi güncelleyebilirsiniz ve aynı zamanda bağımlılıklarıda otomatik olarak yükleyecektir.
|
||
|
||
`go get` versiyon kontrol sistemleri üzerinden çalışmaktadır. Bu yüzden `go get`'i kullanabilmek için `git`, `hg` gibi yazılımları kurmuş olmanız gerekmektedir.
|
||
|
||
Yukarıdaki komutları çalıştırdıktan sonra, çalışma ortamınız aşağıdaki dizin yapısına sahip olacaktır.
|
||
|
||
$GOPATH
|
||
src
|
||
|-github.com
|
||
|-astaxie
|
||
|-beedb
|
||
pkg
|
||
|--${GOOS}_${GOARCH}
|
||
|-github.com
|
||
|-astaxie
|
||
|-beedb.a
|
||
|
||
Aslında, `go get` kaynak kodu çalışma ortamınızdaki `src` dizinine kopyalayıp, `go install` komutunu çalıştırıyor.
|
||
|
||
Üçüncü-parti paketleri aşağıdaki gibi kullanabilirsiniz.
|
||
|
||
import "github.com/astaxie/beedb"
|
||
|
||
## Dizin yapısı
|
||
|
||
Yukardaki adımları tamamladıysanız, çalışma ortamınızdaki dizin yapısı aşağıdaki gibi olacaktır.
|
||
|
||
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
|
||
|
||
Yukarıdaki yapından açık şekilde görüldüğü gibi; `bin` çalıştırılabilir dosyaları, `pkg` derlenmiş dosyaları ve `src` kaynak dosyaları içermektedir.
|
||
|
||
(Windows'daki ortam değişkenlerinin formatı `%GOPATH%` şeklinde olmalıdır, bu kitap unix türevi sistemler üzerinden anlatılmaktadır, bu sebeble Windows kullanıcıları kendi sistemlerine uygun formatı kullanmalıdır .)
|
||
|
||
## Linkler
|
||
|
||
- [İçeriik](preface.md)
|
||
- Önceki bölüm: [Kurulum](01.1.md)
|
||
- Sonraki bölüm: [Go komutları](01.3.md)
|