This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
* [Spanish](es/)
|
||||
* [中文](zh/)
|
||||
* [日本語](ja/)
|
||||
* [Turkish](tr/)
|
||||
|
||||
# Donate
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ It prints following information.
|
||||
|
||||
One thing that you should know in the first is that Go programs are composed by `package`.
|
||||
|
||||
`package<pkgName>` (In this case is `package main`) tells us this source file belongs to `main` package, and the keyword `main` tells us this package will be compiled to a program instead of package files whose extensions are `.a`.
|
||||
`package <pkgName>` (In this case is `package main`) tells us this source file belongs to `main` package, and the keyword `main` tells us this package will be compiled to a program instead of package files whose extensions are `.a`.
|
||||
|
||||
Every executable program has one and only one `main` package, and you need an entry function called `main` without any arguments or return values in the `main` package.
|
||||
|
||||
|
||||
394
tr/01.4.md
Normal file
394
tr/01.4.md
Normal file
@@ -0,0 +1,394 @@
|
||||
# Go geliştirme araçları
|
||||
|
||||
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.
|
||||
|
||||
## LiteIDE
|
||||
|
||||
LiteIDE, sadece go dili için destek veren visualfc tarafıdan geliştirilmiş açık kaynaklı ve hafif bir IDE.
|
||||
|
||||

|
||||
|
||||
Şekil 1.4 LiteIDE'nin ana ekranı
|
||||
|
||||
LiteIDE özellikleri:
|
||||
|
||||
- Cross-platform
|
||||
- Windows
|
||||
- Linux
|
||||
- Mac OS
|
||||
- Çapraz derleme
|
||||
- Birden fazla ortam için derleme yapabilme
|
||||
- Go için çapraz derleme desteği
|
||||
- Proje yönetim standartı
|
||||
- $GOPATH'e dayalı dökümantasyon görüntüleme
|
||||
- $GOPATH'e dayalı derleme sistemi
|
||||
- $GOPATH'e dayalı API dökümantasyonu
|
||||
- Go kaynak kodu editörü
|
||||
- Code outlining
|
||||
- Gocode için tam destek
|
||||
- Go API dökümantasyonu desteği
|
||||
- `F1` kısayolu ile kod deyimini görme
|
||||
- `F2` fonksiyon tanımına gitme
|
||||
- Gdb desteği
|
||||
- `gofmt` ile oto-formatlama
|
||||
- Diğer
|
||||
- Çoklu dil desteği
|
||||
- Eklenti sistemi
|
||||
- Metin editör temaları
|
||||
- Kate'e dayalı söz dizimi desteği
|
||||
- Kodlama esnasında tamamlama özelliği
|
||||
- Ayarlanabilir kısayollar
|
||||
- Markdown desteği
|
||||
- Anlık önizleme
|
||||
- özelleştirilmiş CSS
|
||||
- HTML ve PDF olarak çıktı alma
|
||||
- HTML ve PDF'e dönüştürme
|
||||
|
||||
### LiteIDE kurulumu
|
||||
|
||||
- LiteIDE kur
|
||||
- [Indirme Sayfası](http://code.google.com/p/golangide)
|
||||
- [Kaynak Kodu](https://github.com/visualfc/liteide)
|
||||
|
||||
Önce Go'yu kurmanız gerekiyor, sonra işletim sisteminize uygun verisyonunu indirebilirsiniz. Arşivi istediğiniz dizine açıp kullabilirsiniz.
|
||||
- gocode kur
|
||||
|
||||
Akıllı tamamlama özelliği için gocode'u kurmanız gerekiyor:
|
||||
|
||||
go get -u github.com/nsf/gocode
|
||||
|
||||
- Derleme Ortamı
|
||||
|
||||
Ayarlamalarınızı işletim sisteminize uygun bir şekilde yapın.
|
||||
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.
|
||||
|
||||
GOROOT=c:\go
|
||||
GOBIN=
|
||||
GOARCH=amd64
|
||||
GOOS=windows
|
||||
CGO_ENABLED=1
|
||||
|
||||
PATH=%GOBIN%;%GOROOT%\bin;%PATH%
|
||||
。。。
|
||||
|
||||
`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.
|
||||
|
||||
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.
|
||||
|
||||
GOROOT=$HOME/go
|
||||
GOBIN=
|
||||
GOARCH=amd64
|
||||
GOOS=linux
|
||||
CGO_ENABLED=1
|
||||
|
||||
PATH=$GOBIN:$GOROOT/bin:$PATH
|
||||
。。。
|
||||
|
||||
`GOROOT=$HOME/go` kendi Go kurulu dizininize ayarlayın ve kaydedin.
|
||||
- $GOPATH
|
||||
$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.
|
||||
$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.
|
||||
|
||||
## Sublime Text
|
||||
|
||||
Sıradaki IDE'miz Sublime Text 2 (kısaca Sublime'de diyebilirsiniz) + GoSublime + gocode + MarGo.
|
||||
|
||||
- Akıllı tamamlama
|
||||
|
||||

|
||||
|
||||
Şekil 1.5 Sublime akıllı tamamlama
|
||||
- Kaynak dosyalarını oto-formatlama
|
||||
- Proje yönetimi
|
||||
|
||||

|
||||
|
||||
Şekil 1.6 Sublime proje yönetimi
|
||||
|
||||
- Söz dizimi renklendirme
|
||||
- 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!
|
||||
|
||||
İşletim sisteminize uygun [Sublime](http://www.sublimetext.com/) versiyonunu indirin.
|
||||
|
||||
1. Ctrl+`'ye basın ve aşağıdaki komutu girin.
|
||||
|
||||
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'
|
||||
|
||||
Kurulum tamamlandıktans sonra Sublime yeniden başlatın. "Preferences" menüsünde "Package Control" sekmesine tıklayın.
|
||||
|
||||

|
||||
|
||||
Şekil 1.7 Sublime Package Control
|
||||
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ı).
|
||||
|
||||

|
||||
|
||||
Şekil 1.8 Sublime Paket kurulumu
|
||||
|
||||
"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.
|
||||
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.
|
||||
|
||||
Herşey tamamsa, kurulum başarıyla tamamlanmıştır demektir.
|
||||
|
||||
Eğer değilde terminali açıp `gocode` komutunu çalıştıramıyorsanız $PATH değişkeniniz doğru ayarlanmamış demektir.
|
||||
|
||||
## Vim
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
Şekil 1.8 Vim Go için akıllı tamamlama
|
||||
|
||||
1. Go için renklendirme
|
||||
|
||||
cp -r $GOROOT/misc/vim/* ~/.vim/
|
||||
|
||||
2. Renklendirme ayarını açmak için
|
||||
|
||||
filetype plugin indent on
|
||||
syntax on
|
||||
|
||||
3. [gocode](https://github.com/nsf/gocode/) kur
|
||||
|
||||
go get -u github.com/nsf/gocode
|
||||
|
||||
gocode öntanımlı olarak `$GOBIN` dizinine kurulacaktır
|
||||
|
||||
4. [gocode](https://github.com/nsf/gocode/) ayarla
|
||||
|
||||
~ cd $GOPATH/src/github.com/nsf/gocode/vim
|
||||
~ ./update.bash
|
||||
~ gocode set propose-builtins true
|
||||
propose-builtins true
|
||||
~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64"
|
||||
lib-path "/home/border/gocode/pkg/linux_amd64"
|
||||
~ gocode set
|
||||
propose-builtins true
|
||||
lib-path "/home/border/gocode/pkg/linux_amd64"
|
||||
|
||||
5. Tebrikler! Go'nun dünyasını keşfetmek için `:e main.go` yazın!
|
||||
|
||||
## Emacs
|
||||
|
||||
Emacs ölümcül bir silah olarak bilinir. Sadece bir metin editörü değil, aynı zamanda çok güçlü bir IDE'dedir.
|
||||
|
||||

|
||||
|
||||
Şekil 1.10 Emacs Go editörü ana ekranı
|
||||
|
||||
1. Sözdizimi renklendirme
|
||||
|
||||
cp $GOROOT/misc/emacs/* ~/.emacs.d/
|
||||
|
||||
2. [gocode](https://github.com/nsf/gocode/) kur
|
||||
|
||||
go get -u github.com/nsf/gocode
|
||||
|
||||
gocode öntanımlı olarak `$GOBIN` dizinine kurulacaktır
|
||||
3. [gocode](https://github.com/nsf/gocode/) ayarla
|
||||
|
||||
~ cd $GOPATH/src/github.com/nsf/gocode/vim
|
||||
~ ./update.bash
|
||||
~ gocode set propose-builtins true
|
||||
propose-builtins true
|
||||
~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64"
|
||||
lib-path "/home/border/gocode/pkg/linux_amd64"
|
||||
~ gocode set
|
||||
propose-builtins true
|
||||
lib-path "/home/border/gocode/pkg/linux_amd64"
|
||||
|
||||
4. [Oto tamamlama](http://www.emacswiki.org/emacs/AutoComplete)'yı kur
|
||||
İndirin ve arşivi açın
|
||||
|
||||
~ make install DIR=$HOME/.emacs.d/auto-complete
|
||||
|
||||
~/.emacs dosyasını ayarlayın
|
||||
|
||||
;;auto-complete
|
||||
(require 'auto-complete-config)
|
||||
(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict")
|
||||
(ac-config-default)
|
||||
(local-set-key (kbd "M-/") 'semantic-complete-analyze-inline)
|
||||
(local-set-key "." 'semantic-complete-self-insert)
|
||||
(local-set-key ">" 'semantic-complete-self-insert)
|
||||
|
||||
Bu [adresten](http://www.emacswiki.org/emacs/AutoComplete) daha fazla bilgi edinebilirsiniz.
|
||||
5. .emacs ayarlayın
|
||||
|
||||
;; golang mode
|
||||
(require 'go-mode-load)
|
||||
(require 'go-autocomplete)
|
||||
;; speedbar
|
||||
;; (speedbar 1)
|
||||
(speedbar-add-supported-extension ".go")
|
||||
(add-hook
|
||||
'go-mode-hook
|
||||
'(lambda ()
|
||||
;; gocode
|
||||
(auto-complete-mode 1)
|
||||
(setq ac-sources '(ac-source-go))
|
||||
;; Imenu & Speedbar
|
||||
(setq imenu-generic-expression
|
||||
'(("type" "^type *\\([^ \t\n\r\f]*\\)" 1)
|
||||
("func" "^func *\\(.*\\) {" 1)))
|
||||
(imenu-add-to-menubar "Index")
|
||||
;; Outline mode
|
||||
(make-local-variable 'outline-regexp)
|
||||
(setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....")
|
||||
(outline-minor-mode 1)
|
||||
(local-set-key "\M-a" 'outline-previous-visible-heading)
|
||||
(local-set-key "\M-e" 'outline-next-visible-heading)
|
||||
;; Menu bar
|
||||
(require 'easymenu)
|
||||
(defconst go-hooked-menu
|
||||
'("Go tools"
|
||||
["Go run buffer" go t]
|
||||
["Go reformat buffer" go-fmt-buffer t]
|
||||
["Go check buffer" go-fix-buffer t]))
|
||||
(easy-menu-define
|
||||
go-added-menu
|
||||
(current-local-map)
|
||||
"Go tools"
|
||||
go-hooked-menu)
|
||||
|
||||
;; Other
|
||||
(setq show-trailing-whitespace t)
|
||||
))
|
||||
;; helper function
|
||||
(defun go ()
|
||||
"run current buffer"
|
||||
(interactive)
|
||||
(compile (concat "go run " (buffer-file-name))))
|
||||
|
||||
;; helper function
|
||||
(defun go-fmt-buffer ()
|
||||
"run gofmt on current buffer"
|
||||
(interactive)
|
||||
(if buffer-read-only
|
||||
(progn
|
||||
(ding)
|
||||
(message "Buffer is read only"))
|
||||
(let ((p (line-number-at-pos))
|
||||
(filename (buffer-file-name))
|
||||
(old-max-mini-window-height max-mini-window-height))
|
||||
(show-all)
|
||||
(if (get-buffer "*Go Reformat Errors*")
|
||||
(progn
|
||||
(delete-windows-on "*Go Reformat Errors*")
|
||||
(kill-buffer "*Go Reformat Errors*")))
|
||||
(setq max-mini-window-height 1)
|
||||
(if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t))
|
||||
(progn
|
||||
(erase-buffer)
|
||||
(insert-buffer-substring "*Go Reformat Output*")
|
||||
(goto-char (point-min))
|
||||
(forward-line (1- p)))
|
||||
(with-current-buffer "*Go Reformat Errors*"
|
||||
(progn
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "<standard input>" nil t)
|
||||
(replace-match filename))
|
||||
(goto-char (point-min))
|
||||
(compilation-mode))))
|
||||
(setq max-mini-window-height old-max-mini-window-height)
|
||||
(delete-windows-on "*Go Reformat Output*")
|
||||
(kill-buffer "*Go Reformat Output*"))))
|
||||
;; helper function
|
||||
(defun go-fix-buffer ()
|
||||
"run gofix on current buffer"
|
||||
(interactive)
|
||||
(show-all)
|
||||
(shell-command-on-region (point-min) (point-max) "go tool fix -diff"))
|
||||
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.
|
||||
|
||||
## Eclipse
|
||||
|
||||
Eclipse'de çok tutulan geliştirme araçlarındandır. Size Eclipse ile nasıl Go programları yazabileceğinizi göstereceğim.
|
||||
|
||||

|
||||
|
||||
Şekil 1.1 Eclipse Go editörü ana ekran
|
||||
|
||||
1. [Eclipse](http://www.eclipse.org/) indirip kurun
|
||||
2. [goclipse](https://code.google.com/p/goclipse/) indirin
|
||||
[http://code.google.com/p/goclipse/wiki/InstallationInstructions](http://code.google.com/p/goclipse/wiki/InstallationInstructions)
|
||||
3. gocode indirin
|
||||
|
||||
Github'dan gocode.
|
||||
|
||||
https://github.com/nsf/gocode
|
||||
|
||||
Windows için git kurmalısınız, genelde biz [msysgit](https://code.google.com/p/msysgit/) kullanıyoruz
|
||||
|
||||
gocode kurun
|
||||
|
||||
go get -u github.com/nsf/gocode
|
||||
|
||||
Eğer isterseniz kaynak kodu derleyerek kendinizde kurabilirsiniz.
|
||||
4. [MinGW](http://sourceforge.net/projects/mingw/files/MinGW/) indirip kurun
|
||||
5. Ekenlentileri ayarlayın.
|
||||
|
||||
Windows->Preferences->Go
|
||||
|
||||
(1).Go derleyicisini ayarlayın
|
||||
|
||||

|
||||
|
||||
Şekil 1.12 Eclipse için Go ayarlamaları
|
||||
|
||||
(2).gocode ayarlayın, gocode'u gocode.exe'nin olduğu dizine ayarlayın.
|
||||
|
||||

|
||||
|
||||
Şekil 1.13 gocode Ayarları
|
||||
|
||||
(3). gdb ayarları , gdb'yi gdb.exe'nin olduğu dizine ayarlayın.
|
||||
|
||||

|
||||
|
||||
Şekil 1.14 gdb Ayarları
|
||||
6. Kurulumu kontrol edin
|
||||
|
||||
Yeni bir Go projesi oluşturun ve hello.go adında bir dosya açın.
|
||||
|
||||

|
||||
|
||||
Şekil 1.15 Yeni bir proje ve dosya
|
||||
|
||||
Aşağıdaki gibi test edin.(Eclipse'in terminalinde komutuları çalıştırmanız gerekiyor)
|
||||
|
||||

|
||||
|
||||
Şekil 1.16 Eclipse'de Go'yu test etme
|
||||
|
||||
## IntelliJ IDEA
|
||||
|
||||
Daha önce java ile uğraşanlar IntelliJ'yi biliyordur. Bir eklenti sayesinde Go IDE'si haline gelebiliyor.
|
||||
|
||||
1. IDEA idirin, Ultimate ve Community versiyonları arasında pek bir fark yok.
|
||||
|
||||

|
||||
|
||||
2. Go eklentisini kurun. `File - Setting - Plugins` yolunu izleyin, sonra `Browser repo`'ya tıklayın.
|
||||
|
||||

|
||||
|
||||
3. `golang`'ı aratın, `download and install`'a çift tıklatın ve indirme işleminin bitmesini bekleyin.
|
||||
|
||||

|
||||
|
||||
`Apply` tıklayıp, sonra yeniden başlatın.
|
||||
4. Yeni bir Go projesi oluşturun
|
||||
|
||||

|
||||
|
||||
Bir sonraki adımda Go'nun kurulu olduğu dizini verin -yani $GOROOT dizinini.
|
||||
|
||||
( ***Bu a [blog yazısında](http://wuwen.org/tips-about-using-intellij-idea-and-go/) daha ayrıntlı bilgiler bulabilirsiniz *** )
|
||||
|
||||
## Linkler
|
||||
|
||||
- [İçerik](preface.md)
|
||||
- Önceki bölüm: [Go komutları](01.3.md)
|
||||
- Sonraki bölüm: [Özet](01.5.md)
|
||||
10
tr/01.5.md
Normal file
10
tr/01.5.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# 1.5 Özet
|
||||
|
||||
Geçtiğimiz bölümde, kaynak kodu, standart paketleri ve üçüncü parti yazılımları kullanarak nasıl Go'yu kurabileceğimizi öğrendik. Daha sonra Go geliştirme ortamınızı nasıl ayarlayabileceğinizden bahsettik, genelde GOPATH ağırlıklı. Kurulum ve konfigürasyon işlemlerinden sonra Go nasıl derlenir ve yayınlanır konularından bahsettik. Go ile beraber gelen komut satırı uygulamlarını inceledik. Son olarak etkili bir şekilde Go programları yazmanızı sağlayacak bir kaç IDE'den bahsettik(LiteIDE, Sublime Text, Vim, Emacs, Eclipse, IntelliJ IDEA gibi). İstediğinizi seçip Go dünyasını keşfetmeye başlayabilirsiniz.
|
||||
|
||||
|
||||
## Linkler
|
||||
|
||||
- [İçerik](preface.md)
|
||||
- Önceki bölüm: [Go geliştirme araçları](01.4.md)
|
||||
- Sonraki bölüm: [Temel Go bilgisi](02.0.md)
|
||||
17
tr/02.0.md
Normal file
17
tr/02.0.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# 2 Temel Go bilgisi
|
||||
|
||||
Go, C ailesine ait derlenen bir sistem programala dilidir. Fakat, derlenme hızı diğer C ailesi dillerinden oldukça fazladır. Sadece 25 anahtar kelimeye sahip... 26 harflik İngiliz alfabesinden bile daha az! Başlamadan önce bu anahtar kelimelere bir göz atalım.
|
||||
|
||||
break default func interface select
|
||||
case defer go map struct
|
||||
chan else goto package switch
|
||||
const fallthrough if range type
|
||||
continue for import return var
|
||||
|
||||
Bu bölümde size temel Go bilgisi öğreteceğim. Go dilinin özünü ve tasarımının ne kadar güzel olduğunu göreceksiniz. Go ile programlama çok eğilenceli olabilir. Bu unitenin sonunda, yukarıdaki kelimelere aşina olacaksınız.
|
||||
|
||||
## Linkler
|
||||
|
||||
- [İçerik](preface.md)
|
||||
- Önceki bölüm: [1.Unite özeti](01.5.md)
|
||||
- Sonraki bölüm: ["Merhaba, Go"](02.1.md)
|
||||
53
tr/02.1.md
Normal file
53
tr/02.1.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 2.1 Hello, Go
|
||||
|
||||
Go ile uygulamalar geliştirmeden önce, nasıl basit programlar yazabiliriz onu öğrenelim. Temeli atamdan koca bir bina inşa edemezsiniz. Bu yüzden, bu bölümde basit bir program yazarak söz dizimini öğreneceğiz.
|
||||
|
||||
## Program
|
||||
|
||||
Uluslararası gelenekler göre, bir programala dilini öğrenmeye başlarken genelde "Merhaba dünya" ile kodlanmaya başlanır.
|
||||
|
||||
Hazır mısınız? Öyleyse başlayalım!
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Printf("Merhaba, dünya ya da 你好,世界 ya da καλημ ́ρα κóσμ ya da こんにちは世界\n")
|
||||
}
|
||||
|
||||
Aşağıdaki cümleyi ekrana basavaktır.
|
||||
|
||||
Merhaba, dünya ya da 你好,世界 ya da καλημ ́ρα κóσμ ya da こんにちは世界
|
||||
|
||||
## Açıklama
|
||||
|
||||
Bilmeniz gereken ilk şey Go programları `package`(paket)'lerden meydana gelir.
|
||||
|
||||
`package<paketİsmi>` (Bu örnekte `package main`) satırı bize bu programın `main` paketine ait olduğunu, ve `main` kelimesi ise bu programın uzantısı `.a` olan bir kütüphane olarak değil bir yazılım olarak derleneceğini söylüyor.
|
||||
|
||||
Her çalıştırılabilir program sadece bir `main` paketi içerebilir, ve `main` adında argüman almayan ve bir değer dönemeyen fonksiyona sahip olamalıdır.
|
||||
|
||||
`Merhaba, dünya…` yazdırabilmek için, `Printf` adında bir fonksiyon çağırdık. Bu fonksiyon `fmt` paketinden geliyor, `import "fmt"` satırı ile gerekli paketi çağırmış olduk.
|
||||
|
||||
Go'daki paket mantığı Python dili ile benzer, ve birkaç avantajı var: Modülerlik (prograını bir çok parçaya ayırabilirsiniz) ve tekrar kullanabilme (her modul başka ugulamalar için kullanılabilir). Paket konseptinden biraz bahsetmiş olduk, daha sonra kendi paketimizi oluşturacağız.
|
||||
|
||||
Beşinci satırda, `func` kelimesi `main` fonksiyonumuzu tanımladık. Fonksiyon gövde `{}` parentezlerin arasında; C, C++ ve Java'da olduğu gibi.
|
||||
|
||||
Gördüğünüz gibi, herhangi bir arguman almıyor. Argüman alan, belirli bir değer dönen ve birden fazla dönüş değeri olan fanksiyonlar yazmasını öğrenceğiz.
|
||||
|
||||
Altıncı satırda, `fmt` paketinden `Printf` fonksiyonunu çağırdık. Çağırma işlemi `<paketİsmi>.<fonskiyonismi>` şeklinde Pthyon'da olduğu gibi.
|
||||
|
||||
1.ünitede bahsettiğimiz gibi, peket ismi ve paket dosyalarını içerin dizinin ismi farklı olabilir. Burada `<paket ismi>` `package <paket ismin>`den geliyor, diznin isminden değil.
|
||||
|
||||
Yukarıdaki örneğin ASCII olmayan karakterler içerdiğini fark etmişsinizdir. Buradan da anlayacağınız üzeri Go UTF-8'i ön tanımlı olarak destekliyor. Herhangi bir UTF-8 karakterini programınızda kullabilirsiniz.
|
||||
|
||||
## Sonuç
|
||||
|
||||
Go `package` (Python'daki modüller gibi) mantığını kullanarak programları organize ediyor. `main.main()` (bu fonksiyon `main` paketinde olmalı) fonksiyonu programınızın başlangıç noktası. Go öntanımlı olarak UTF-8 destekliyor, zaten Go'nun oluşturanlardan biri UTF-8 yaratan kişi, bu yüzden Go ilk çıktığınadn beri çoklu dil desteğine sahip.
|
||||
|
||||
## Linkler
|
||||
|
||||
- [İçerik](preface.md)
|
||||
- Önceki bölüm: [Temel go bilgisi](02.0.md)
|
||||
- Sonraki bölüm: [Go Temelleri](02.2.md)
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
## 结论
|
||||
|
||||
Go使用`package`(和Python的模块类似)来组织代码。`main.main()`函数(这个函数主要位于主包)是每一个独立的可运行程序的入口点。Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者),所以它天生就具有多语言的支持。
|
||||
Go使用`package`(和Python的模块类似)来组织代码。`main.main()`函数(这个函数位于主包)是每一个独立的可运行程序的入口点。Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者),所以它天生支持多语言。
|
||||
|
||||
## links
|
||||
* [目录](<preface.md>)
|
||||
|
||||
10
zh/02.2.md
10
zh/02.2.md
@@ -13,7 +13,7 @@ Go语言里面定义变量有多种方式。
|
||||
|
||||
定义多个变量
|
||||
|
||||
//定义三个类型都是“type”的三个变量
|
||||
//定义三个类型都是“type”的变量
|
||||
var vname1, vname2, vname3 type
|
||||
|
||||
定义变量并初始化值
|
||||
@@ -24,7 +24,7 @@ Go语言里面定义变量有多种方式。
|
||||
同时初始化多个变量
|
||||
|
||||
/*
|
||||
定义三个类型都是"type"的三个变量,并且它们分别初始化相应的值
|
||||
定义三个类型都是"type"的变量,并且分别初始化为相应的值
|
||||
vname1为v1,vname2为v2,vname3为v3
|
||||
*/
|
||||
var vname1, vname2, vname3 type= v1, v2, v3
|
||||
@@ -32,7 +32,7 @@ Go语言里面定义变量有多种方式。
|
||||
你是不是觉得上面这样的定义有点繁琐?没关系,因为Go语言的设计者也发现了,有一种写法可以让它变得简单一点。我们可以直接忽略类型声明,那么上面的代码变成这样了:
|
||||
|
||||
/*
|
||||
定义三个变量,它们分别初始化相应的值
|
||||
定义三个变量,它们分别初始化为相应的值
|
||||
vname1为v1,vname2为v2,vname3为v3
|
||||
然后Go会根据其相应值的类型来帮你初始化它们
|
||||
*/
|
||||
@@ -41,7 +41,7 @@ Go语言里面定义变量有多种方式。
|
||||
你觉得上面的还是有些繁琐?好吧,我也觉得。让我们继续简化:
|
||||
|
||||
/*
|
||||
定义三个变量,它们分别初始化相应的值
|
||||
定义三个变量,它们分别初始化为相应的值
|
||||
vname1为v1,vname2为v2,vname3为v3
|
||||
编译器会根据初始化的值自动推导出相应的类型
|
||||
*/
|
||||
@@ -63,7 +63,7 @@ Go对于已声明但未使用的变量会在编译阶段报错,比如下面的
|
||||
|
||||
## 常量
|
||||
|
||||
所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。在Go程序中,常量可定义为数值、布尔值或字符串等类型。
|
||||
所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。在Go程序中,常量可定义为数值、布尔值或字符串等类型。
|
||||
|
||||
它的语法如下:
|
||||
|
||||
|
||||
@@ -110,6 +110,8 @@ channel通过操作符`<-`来接收和发送数据
|
||||
fmt.Println(<-c)
|
||||
fmt.Println(<-c)
|
||||
}
|
||||
//修改为1报如下的错误:
|
||||
//fatal error: all goroutines are asleep - deadlock!
|
||||
|
||||
## Range和Close
|
||||
上面这个例子中,我们需要读取两次c,这样不是很方便,Go考虑到了这一点,所以也可以通过range,像操作slice或者map一样操作缓存类型的channel,请看下面的例子
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# 5.1 database/sql接口
|
||||
Go与PHP不同的地方是Go没有官方提供数据库驱动,而是为开发者开发数据库驱动定义了一些标准接口,开发者可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,只要按照标准接口开发的代码, 以后需要迁移数据库时,不需要任何修改。那么Go都定义了哪些标准接口呢?让我们来详细的分析一下
|
||||
Go与PHP不同的地方是Go官方没有提供数据库驱动,而是为开发数据库驱动定义了一些标准接口,开发者可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,只要是按照标准接口开发的代码, 以后需要迁移数据库时,不需要任何修改。那么Go都定义了哪些标准接口呢?让我们来详细的分析一下
|
||||
|
||||
## sql.Register
|
||||
这个存在于database/sql的函数是用来注册数据库驱动的,当第三方开发者开发数据库驱动时,都会实现init函数,在init里面会调用这个`Register(name string, driver driver.Driver)`完成本驱动的注册。
|
||||
@@ -36,7 +36,7 @@ Go与PHP不同的地方是Go没有官方提供数据库驱动,而是为开发
|
||||
|
||||
>新手都会被这个`_`所迷惑,其实这个就是Go设计的巧妙之处,我们在变量赋值的时候经常看到这个符号,它是用来忽略变量赋值的占位符,那么包引入用到这个符号也是相似的作用,这儿使用`_`的意思是引入后面的包名而不直接使用这个包中定义的函数,变量等资源。
|
||||
|
||||
>我们在2.3节流程和函数的一节中介绍过init函数的初始化过程,包在引入的时候会自动调用包的init函数以完成对包的初始化。因此,我们引入上面的数据库驱动包之后会自动去调用init函数,然后在init函数里面注册这个数据库驱动,这样我们就可以在接下来的代码中直接使用这个数据库驱动了。
|
||||
>我们在2.3节流程和函数一节中介绍过init函数的初始化过程,包在引入的时候会自动调用包的init函数以完成对包的初始化。因此,我们引入上面的数据库驱动包之后会自动去调用init函数,然后在init函数里面注册这个数据库驱动,这样我们就可以在接下来的代码中直接使用这个数据库驱动了。
|
||||
|
||||
## driver.Driver
|
||||
Driver是一个数据库驱动的接口,他定义了一个method: Open(name string),这个方法返回一个数据库的Conn接口。
|
||||
|
||||
Reference in New Issue
Block a user