|
| 1 | +# Go geliştirme araçları |
| 2 | + |
| 3 | +Bu bölümde, otomatik formatlama ve akıllı kod tamamlama gibi özelliklerine sahip, daha hızlı ve verimle bir şekilde kodlama yapabileceğiniz IDE'lerden bahsedeceğim. Tüm IDE'ler cross-platform çalışabiliyor, aynı işletim sistemini kullanmıyor olasanız bile adımlar çok fazla değişiklik göstermeyecektir. |
| 4 | + |
| 5 | +## LiteIDE |
| 6 | + |
| 7 | +LiteIDE, sadece go dili için destek veren visualfc tarafıdan geliştirilmiş açık kaynaklı ve hafif bir IDE. |
| 8 | + |
| 9 | + |
| 10 | + |
| 11 | +Şekil 1.4 LiteIDE'nin ana ekranı |
| 12 | + |
| 13 | +LiteIDE özellikleri: |
| 14 | + |
| 15 | +- Cross-platform |
| 16 | + - Windows |
| 17 | + - Linux |
| 18 | + - Mac OS |
| 19 | +- Çapraz derleme |
| 20 | + - Birden fazla ortam için derleme yapabilme |
| 21 | + - Go için çapraz derleme desteği |
| 22 | +- Proje yönetim standartı |
| 23 | + - $GOPATH'e dayalı dökümantasyon görüntüleme |
| 24 | + - $GOPATH'e dayalı derleme sistemi |
| 25 | + - $GOPATH'e dayalı API dökümantasyonu |
| 26 | +- Go kaynak kodu editörü |
| 27 | + - Code outlining |
| 28 | + - Gocode için tam destek |
| 29 | + - Go API dökümantasyonu desteği |
| 30 | + - `F1` kısayolu ile kod deyimini görme |
| 31 | + - `F2` fonksiyon tanımına gitme |
| 32 | + - Gdb desteği |
| 33 | + - `gofmt` ile oto-formatlama |
| 34 | +- Diğer |
| 35 | + - Çoklu dil desteği |
| 36 | + - Eklenti sistemi |
| 37 | + - Metin editör temaları |
| 38 | + - Kate'e dayalı söz dizimi desteği |
| 39 | + - Kodlama esnasında tamamlama özelliği |
| 40 | + - Ayarlanabilir kısayollar |
| 41 | + - Markdown desteği |
| 42 | + - Anlık önizleme |
| 43 | + - özelleştirilmiş CSS |
| 44 | + - HTML ve PDF olarak çıktı alma |
| 45 | + - HTML ve PDF'e dönüştürme |
| 46 | + |
| 47 | +### LiteIDE kurulumu |
| 48 | + |
| 49 | +- LiteIDE kur |
| 50 | + - [Indirme Sayfası](http://code.google.com/p/golangide) |
| 51 | + - [Kaynak Kodu](https://github.com/visualfc/liteide) |
| 52 | + |
| 53 | + Önce Go'yu kurmanız gerekiyor, sonra işletim sisteminize uygun verisyonunu indirebilirsiniz. Arşivi istediğiniz dizine açıp kullabilirsiniz. |
| 54 | +- gocode kur |
| 55 | + |
| 56 | + Akıllı tamamlama özelliği için gocode'u kurmanız gerekiyor: |
| 57 | + |
| 58 | + go get -u github.com/nsf/gocode |
| 59 | + |
| 60 | +- Derleme Ortamı |
| 61 | + |
| 62 | + Ayarlamalarınızı işletim sisteminize uygun bir şekilde yapın. |
| 63 | + Go'nun 64-bitlik versiyonunu windowsta koşturuyorsanız, araç çubugunda konfigürasyon ortamı olarak win64 olarak ayarlayın.`option` menüsü altındaki `liteEnv` sekmesine tıklayın ve `win64.env` adlı dosyayı açın. |
| 64 | + |
| 65 | + GOROOT=c:\go |
| 66 | + GOBIN= |
| 67 | + GOARCH=amd64 |
| 68 | + GOOS=windows |
| 69 | + CGO_ENABLED=1 |
| 70 | + |
| 71 | + PATH=%GOBIN%;%GOROOT%\bin;%PATH% |
| 72 | + 。。。 |
| 73 | + |
| 74 | + `GOROOT=c:\go` satırını kendi Go kurulu dizininize ayarlayın ve kaydedin. MinGW64 kullanıyorsanız,`c:\MinGW64\bin`yi `cgo` desteği için PATH değişkenine ekleyin. |
| 75 | + |
| 76 | + Go'nun 64-bitlik linuxta koşturuyorsanız, araç çubuğunda kanfigürasyon ortamı olarak linux64 olarak ayarlayın. `option` menüsü altındaki `liteEnv` sekmesine tıklayın ve `linux64.env` adlı dosyayı açın. |
| 77 | + |
| 78 | + GOROOT=$HOME/go |
| 79 | + GOBIN= |
| 80 | + GOARCH=amd64 |
| 81 | + GOOS=linux |
| 82 | + CGO_ENABLED=1 |
| 83 | + |
| 84 | + PATH=$GOBIN:$GOROOT/bin:$PATH |
| 85 | + 。。。 |
| 86 | + |
| 87 | + `GOROOT=$HOME/go` kendi Go kurulu dizininize ayarlayın ve kaydedin. |
| 88 | +- $GOPATH |
| 89 | + $GOPATH, projelerin bulunuduğu dizini ifade ediyor. Komut istemcisini açın (ya da `Ctrl+` tuşuna basın), `go help gopath` komutu ile daha ayrıntılı bilgi elde edebilirsiniz. |
| 90 | + $GOPATH'in içindekileri görüp, dizin yolunu değiştirmek LiteIDE kullanarak çok basit bir şekilde ayarlanabilir.`View - Setup GOPATH` size düzenleme yapabileceğiniz bir pencere açacaktır. |
| 91 | + |
| 92 | +## Sublime Text |
| 93 | + |
| 94 | +Sıradaki IDE'miz Sublime Text 2 (kısaca Sublime'de diyebilirsiniz) + GoSublime + gocode + MarGo. |
| 95 | + |
| 96 | +- Akıllı tamamlama |
| 97 | + |
| 98 | +  |
| 99 | + |
| 100 | + Şekil 1.5 Sublime akıllı tamamlama |
| 101 | +- Kaynak dosyalarını oto-formatlama |
| 102 | +- Proje yönetimi |
| 103 | + |
| 104 | +  |
| 105 | + |
| 106 | + Şekil 1.6 Sublime proje yönetimi |
| 107 | + |
| 108 | +- Söz dizimi renklendirme |
| 109 | +- Fonksiyon kısıtlaması olmaksızın bedava sürüm. Arada bir lisans alma penceresi çıkabilir, ama kapatıp geçebilirsiniz. Eğer hoşunuza gider ve daha verimli kodlar yazmak isterseniz full sürümünü satın alın ve geliştiricilere destek olun! |
| 110 | + |
| 111 | +İşletim sisteminize uygun [Sublime](http://www.sublimetext.com/) versiyonunu indirin. |
| 112 | + |
| 113 | +1. Ctrl+`'ye basın ve aşağıdaki komutu girin. |
| 114 | + |
| 115 | + import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation' |
| 116 | + |
| 117 | + Kurulum tamamlandıktans sonra Sublime yeniden başlatın. "Preferences" menüsünde "Package Control" sekmesine tıklayın. |
| 118 | + |
| 119 | +  |
| 120 | + |
| 121 | + Şekil 1.7 Sublime Package Control |
| 122 | +2. GoSublime, SidebarEnhancements ve Go Build kurmak için, `Ctrl+Shift+p` tuşlarına basıp Package Control penceresini açın, `pcip` yazın ("Package Control: Install Package"nin kısaltması). |
| 123 | + |
| 124 | +  |
| 125 | + |
| 126 | + Şekil 1.8 Sublime Paket kurulumu |
| 127 | + |
| 128 | + "GoSublime" yazın, OK tuşuna tıklayıp paketi yükleyin, aynı adımlarıSidebarEnhancements ve Go Build kurmak için tekrarlayın. Bir defa daha, kurulumlar bittikten sonra tekrar başlatın. |
| 129 | +3. Kurulumun başarılı olup olmadığını öğrenmek için, Sublime ile bir go dosyasını açıp renklendirme yapıp yapmadığına bakabilirsiniz. `import` yazarak kod tamamlamanın çalışıp çalışmadığını anlayabilirsiniz. `import "fmt"` yazdıktan sonra, `fmt.` yazın ve `fmt` kütüphanesinin metodlarının listelendiğini görebilirsiniz. |
| 130 | + |
| 131 | + Herşey tamamsa, kurulum başarıyla tamamlanmıştır demektir. |
| 132 | + |
| 133 | + Eğer değilde terminali açıp `gocode` komutunu çalıştıramıyorsanız $PATH değişkeniniz doğru ayarlanmamış demektir. |
| 134 | + |
| 135 | +## Vim |
| 136 | + |
| 137 | +Vim, programcılar arasında çok populer bir araçtır, Vi'nin gelişmiş versiyonudur. Akıllı tamamlama, hata ayıklama ve derleme için fonksiyonları mevcut. |
| 138 | + |
| 139 | + |
| 140 | + |
| 141 | +Şekil 1.8 Vim Go için akıllı tamamlama |
| 142 | + |
| 143 | +1. Go için renklendirme |
| 144 | + |
| 145 | + cp -r $GOROOT/misc/vim/* ~/.vim/ |
| 146 | + |
| 147 | +2. Renklendirme ayarını açmak için |
| 148 | + |
| 149 | + filetype plugin indent on |
| 150 | + syntax on |
| 151 | + |
| 152 | +3. [gocode](https://github.com/nsf/gocode/) kur |
| 153 | + |
| 154 | + go get -u github.com/nsf/gocode |
| 155 | + |
| 156 | + gocode öntanımlı olarak `$GOBIN` dizinine kurulacaktır |
| 157 | + |
| 158 | +4. [gocode](https://github.com/nsf/gocode/) ayarla |
| 159 | + |
| 160 | + ~ cd $GOPATH/src/github.com/nsf/gocode/vim |
| 161 | + ~ ./update.bash |
| 162 | + ~ gocode set propose-builtins true |
| 163 | + propose-builtins true |
| 164 | + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" |
| 165 | + lib-path "/home/border/gocode/pkg/linux_amd64" |
| 166 | + ~ gocode set |
| 167 | + propose-builtins true |
| 168 | + lib-path "/home/border/gocode/pkg/linux_amd64" |
| 169 | + |
| 170 | +5. Tebrikler! Go'nun dünyasını keşfetmek için `:e main.go` yazın! |
| 171 | + |
| 172 | +## Emacs |
| 173 | + |
| 174 | +Emacs ölümcül bir silah olarak bilinir. Sadece bir metin editörü değil, aynı zamanda çok güçlü bir IDE'dedir. |
| 175 | + |
| 176 | + |
| 177 | + |
| 178 | +Şekil 1.10 Emacs Go editörü ana ekranı |
| 179 | + |
| 180 | +1. Sözdizimi renklendirme |
| 181 | + |
| 182 | + cp $GOROOT/misc/emacs/* ~/.emacs.d/ |
| 183 | + |
| 184 | +2. [gocode](https://github.com/nsf/gocode/) kur |
| 185 | + |
| 186 | + go get -u github.com/nsf/gocode |
| 187 | + |
| 188 | + gocode öntanımlı olarak `$GOBIN` dizinine kurulacaktır |
| 189 | +3. [gocode](https://github.com/nsf/gocode/) ayarla |
| 190 | + |
| 191 | + ~ cd $GOPATH/src/github.com/nsf/gocode/vim |
| 192 | + ~ ./update.bash |
| 193 | + ~ gocode set propose-builtins true |
| 194 | + propose-builtins true |
| 195 | + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" |
| 196 | + lib-path "/home/border/gocode/pkg/linux_amd64" |
| 197 | + ~ gocode set |
| 198 | + propose-builtins true |
| 199 | + lib-path "/home/border/gocode/pkg/linux_amd64" |
| 200 | + |
| 201 | +4. [Oto tamamlama](http://www.emacswiki.org/emacs/AutoComplete)'yı kur |
| 202 | + İndirin ve arşivi açın |
| 203 | + |
| 204 | + ~ make install DIR=$HOME/.emacs.d/auto-complete |
| 205 | + |
| 206 | + ~/.emacs dosyasını ayarlayın |
| 207 | + |
| 208 | + ;;auto-complete |
| 209 | + (require 'auto-complete-config) |
| 210 | + (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") |
| 211 | + (ac-config-default) |
| 212 | + (local-set-key (kbd "M-/") 'semantic-complete-analyze-inline) |
| 213 | + (local-set-key "." 'semantic-complete-self-insert) |
| 214 | + (local-set-key ">" 'semantic-complete-self-insert) |
| 215 | + |
| 216 | + Bu [adresten](http://www.emacswiki.org/emacs/AutoComplete) daha fazla bilgi edinebilirsiniz. |
| 217 | +5. .emacs ayarlayın |
| 218 | + |
| 219 | + ;; golang mode |
| 220 | + (require 'go-mode-load) |
| 221 | + (require 'go-autocomplete) |
| 222 | + ;; speedbar |
| 223 | + ;; (speedbar 1) |
| 224 | + (speedbar-add-supported-extension ".go") |
| 225 | + (add-hook |
| 226 | + 'go-mode-hook |
| 227 | + '(lambda () |
| 228 | + ;; gocode |
| 229 | + (auto-complete-mode 1) |
| 230 | + (setq ac-sources '(ac-source-go)) |
| 231 | + ;; Imenu & Speedbar |
| 232 | + (setq imenu-generic-expression |
| 233 | + '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1) |
| 234 | + ("func" "^func *\\(.*\\) {" 1))) |
| 235 | + (imenu-add-to-menubar "Index") |
| 236 | + ;; Outline mode |
| 237 | + (make-local-variable 'outline-regexp) |
| 238 | + (setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....") |
| 239 | + (outline-minor-mode 1) |
| 240 | + (local-set-key "\M-a" 'outline-previous-visible-heading) |
| 241 | + (local-set-key "\M-e" 'outline-next-visible-heading) |
| 242 | + ;; Menu bar |
| 243 | + (require 'easymenu) |
| 244 | + (defconst go-hooked-menu |
| 245 | + '("Go tools" |
| 246 | + ["Go run buffer" go t] |
| 247 | + ["Go reformat buffer" go-fmt-buffer t] |
| 248 | + ["Go check buffer" go-fix-buffer t])) |
| 249 | + (easy-menu-define |
| 250 | + go-added-menu |
| 251 | + (current-local-map) |
| 252 | + "Go tools" |
| 253 | + go-hooked-menu) |
| 254 | + |
| 255 | + ;; Other |
| 256 | + (setq show-trailing-whitespace t) |
| 257 | + )) |
| 258 | + ;; helper function |
| 259 | + (defun go () |
| 260 | + "run current buffer" |
| 261 | + (interactive) |
| 262 | + (compile (concat "go run " (buffer-file-name)))) |
| 263 | + |
| 264 | + ;; helper function |
| 265 | + (defun go-fmt-buffer () |
| 266 | + "run gofmt on current buffer" |
| 267 | + (interactive) |
| 268 | + (if buffer-read-only |
| 269 | + (progn |
| 270 | + (ding) |
| 271 | + (message "Buffer is read only")) |
| 272 | + (let ((p (line-number-at-pos)) |
| 273 | + (filename (buffer-file-name)) |
| 274 | + (old-max-mini-window-height max-mini-window-height)) |
| 275 | + (show-all) |
| 276 | + (if (get-buffer "*Go Reformat Errors*") |
| 277 | + (progn |
| 278 | + (delete-windows-on "*Go Reformat Errors*") |
| 279 | + (kill-buffer "*Go Reformat Errors*"))) |
| 280 | + (setq max-mini-window-height 1) |
| 281 | + (if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t)) |
| 282 | + (progn |
| 283 | + (erase-buffer) |
| 284 | + (insert-buffer-substring "*Go Reformat Output*") |
| 285 | + (goto-char (point-min)) |
| 286 | + (forward-line (1- p))) |
| 287 | + (with-current-buffer "*Go Reformat Errors*" |
| 288 | + (progn |
| 289 | + (goto-char (point-min)) |
| 290 | + (while (re-search-forward "<standard input>" nil t) |
| 291 | + (replace-match filename)) |
| 292 | + (goto-char (point-min)) |
| 293 | + (compilation-mode)))) |
| 294 | + (setq max-mini-window-height old-max-mini-window-height) |
| 295 | + (delete-windows-on "*Go Reformat Output*") |
| 296 | + (kill-buffer "*Go Reformat Output*")))) |
| 297 | + ;; helper function |
| 298 | + (defun go-fix-buffer () |
| 299 | + "run gofix on current buffer" |
| 300 | + (interactive) |
| 301 | + (show-all) |
| 302 | + (shell-command-on-region (point-min) (point-max) "go tool fix -diff")) |
| 303 | +6. Tebrikler, kurulumu tamamladınız! Speedbar öntanımlı olarak kapalı gelir, `;;(speedbar 1)` önündeki yorum satırını kaldırın, ya da `M-x speedbar` şeklinde kullanabilirsiniz. |
| 304 | + |
| 305 | +## Eclipse |
| 306 | + |
| 307 | +Eclipse'de çok tutulan geliştirme araçlarındandır. Size Eclipse ile nasıl Go programları yazabileceğinizi göstereceğim. |
| 308 | + |
| 309 | + |
| 310 | + |
| 311 | +Şekil 1.1 Eclipse Go editörü ana ekran |
| 312 | + |
| 313 | +1. [Eclipse](http://www.eclipse.org/) indirip kurun |
| 314 | +2. [goclipse](https://code.google.com/p/goclipse/) indirin |
| 315 | + [http://code.google.com/p/goclipse/wiki/InstallationInstructions](http://code.google.com/p/goclipse/wiki/InstallationInstructions) |
| 316 | +3. gocode indirin |
| 317 | + |
| 318 | + Github'dan gocode. |
| 319 | + |
| 320 | + https://github.com/nsf/gocode |
| 321 | + |
| 322 | + Windows için git kurmalısınız, genelde biz [msysgit](https://code.google.com/p/msysgit/) kullanıyoruz |
| 323 | + |
| 324 | + gocode kurun |
| 325 | + |
| 326 | + go get -u github.com/nsf/gocode |
| 327 | + |
| 328 | + Eğer isterseniz kaynak kodu derleyerek kendinizde kurabilirsiniz. |
| 329 | +4. [MinGW](http://sourceforge.net/projects/mingw/files/MinGW/) indirip kurun |
| 330 | +5. Ekenlentileri ayarlayın. |
| 331 | + |
| 332 | + Windows->Preferences->Go |
| 333 | + |
| 334 | + (1).Go derleyicisini ayarlayın |
| 335 | + |
| 336 | +  |
| 337 | + |
| 338 | + Şekil 1.12 Eclipse için Go ayarlamaları |
| 339 | + |
| 340 | + (2).gocode ayarlayın, gocode'u gocode.exe'nin olduğu dizine ayarlayın. |
| 341 | + |
| 342 | +  |
| 343 | + |
| 344 | + Şekil 1.13 gocode Ayarları |
| 345 | + |
| 346 | + (3). gdb ayarları , gdb'yi gdb.exe'nin olduğu dizine ayarlayın. |
| 347 | + |
| 348 | +  |
| 349 | + |
| 350 | + Şekil 1.14 gdb Ayarları |
| 351 | +6. Kurulumu kontrol edin |
| 352 | + |
| 353 | + Yeni bir Go projesi oluşturun ve hello.go adında bir dosya açın. |
| 354 | + |
| 355 | +  |
| 356 | + |
| 357 | + Şekil 1.15 Yeni bir proje ve dosya |
| 358 | + |
| 359 | + Aşağıdaki gibi test edin.(Eclipse'in terminalinde komutuları çalıştırmanız gerekiyor) |
| 360 | + |
| 361 | +  |
| 362 | + |
| 363 | + Şekil 1.16 Eclipse'de Go'yu test etme |
| 364 | + |
| 365 | +## IntelliJ IDEA |
| 366 | + |
| 367 | +Daha önce java ile uğraşanlar IntelliJ'yi biliyordur. Bir eklenti sayesinde Go IDE'si haline gelebiliyor. |
| 368 | + |
| 369 | +1. IDEA idirin, Ultimate ve Community versiyonları arasında pek bir fark yok. |
| 370 | + |
| 371 | +  |
| 372 | + |
| 373 | +2. Go eklentisini kurun. `File - Setting - Plugins` yolunu izleyin, sonra `Browser repo`'ya tıklayın. |
| 374 | + |
| 375 | +  |
| 376 | + |
| 377 | +3. `golang`'ı aratın, `download and install`'a çift tıklatın ve indirme işleminin bitmesini bekleyin. |
| 378 | + |
| 379 | +  |
| 380 | + |
| 381 | + `Apply` tıklayıp, sonra yeniden başlatın. |
| 382 | +4. Yeni bir Go projesi oluşturun |
| 383 | + |
| 384 | +  |
| 385 | + |
| 386 | + Bir sonraki adımda Go'nun kurulu olduğu dizini verin -yani $GOROOT dizinini. |
| 387 | + |
| 388 | +( ***Bu a [blog yazısında](http://wuwen.org/tips-about-using-intellij-idea-and-go/) daha ayrıntlı bilgiler bulabilirsiniz *** ) |
| 389 | + |
| 390 | +## Linkler |
| 391 | + |
| 392 | +- [İçerik](preface.md) |
| 393 | +- Önceki bölüm: [Go komutları](01.3.md) |
| 394 | +- Sonraki bölüm: [Özet](01.5.md) |
0 commit comments