1 下載依賴包問題
cannot find package "github.com/gocql/gocql" in any of:
/usr/local/src/go/src/github.com/gocql/gocql (from $GOROOT)
($GOPATH not set)
解決方式;
1. 設定GOROOT、GOPATH
GOPATH用來存在下載第三方的依賴包。
go build會從GOROOT和GOPATH中尋找依賴包
如:
export GOROOT=/usr/local/src/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/Users/Test/gopath/go_workspace
2 下載依賴包
go get github.com/gocql/gocql
2 IDEA
2.1 intellij idea 14 使用go外掛程式
http://blog.csdn.net/zhouzme/article/details/44133507
3 位元組與字元區別
golang採用utf-8編碼儲存。一個中文可以採用3個位元組或者4個位元組儲存。如果採用字元表示,則用rune表示。 []byte表示位元組數組,[]rune表示字元數組。
4 採用代理下載項目的依賴包
http_proxy=hx.gy:1080 go get -d -v google.golang.org/grpc
hx,gy 代理支援的網域名稱
android.com
bitbucket.org
bintray.com
chromium.org
clojars.org
registry.cordova.io
dartlang.org
download.eclipse.org
github.com
githubusercontent.com
golang.org
googlesource.com
storage.googleapis.com
code.google.com
dl.google.com
dl-ssl.google.com
getcomposer.org
gradle.org
gopkg.in
ionicframework.com
plugins.jetbrains.com
macports.org
maven.org
melpa.org
mendeley.com
www.nuget.org
npmjs.com
npmjs.org
pypi.python.org
packagist.org
packagecontrol.io
rubygems.org
repo.typesafe.com
5 gopm 代替go 下載第三方依賴包
在國內採用go get有時會下載不到一些網站如golang.org的依賴包。
可以採用gopm從golang.org一些鏡像網站上下載。
1) 安裝gopm
go get -u github.com/gpmgo/gopm
執行該命令的使用者需要設定GOPATH參數
2)gopm get 如果不攜帶-g採用,會把依賴包下載.vendor目錄下面。
採用-g 參數,可以把依賴包下載到GOPATH目錄中
gopm get -g golang.org/x/net
5 defer 執行過程
defer是在return之前執行的。這個在 官方文檔中是明確說明了的。要使用defer時不踩坑,最重要的一點就是要明白,return xxx這一條語句並不是一條原子指令!
函數返回的過程是這樣的:先給傳回值賦值,然後調用defer運算式,最後才是返回到調用函數
6 包初始化順序
若包p匯入了包q,則包q的init函數會在包p的任何函數運行前執行。
即函數main.main()會在所有的init()函數結束後運行
7 channel
分為緩衝channel和無緩衝channel,對於無緩衝channel,則channel的接受發生再 channel的發送完成之前。
即go 協程發送資訊時,一直阻塞到其它協程接受了資訊為止。
8 go運行時 協程的調度
當因某一協程阻塞導致物理線程阻塞時,go 運行時會把其它協程分配到其它物理線程上執行。
9 方法 傳遞值和傳遞指標
傳遞值,是某個對象(各個屬性值)的copy,方法不會改變實參的屬性值。
傳遞指標,方法可以改變實參的屬性值。
10 goroutine
在同一個原生線程裡,如果當前goroutine不發生阻塞,其不會讓出cpu供該線程的其它gorountine執行。
如果goroutine發生阻塞,go 自動會把其它與該goroutine處於同一線程的goroutine分配到其它線程執行。
11 golang的值、引用和指標
原始類型和自訂類型作為函數的參數時,都是值傳遞。 因此當自訂類型作為參數傳遞給函數時,實際參數的值不會改變。
(Java自訂對象均是參考型別)。
golang中得map、數組、channel是參考型別。
12 golang的工程結構
工程名
--包1
---1.go
--包2
--2.go
main.go
本工程內的包引入,採用相對路徑方式
如 import "工程名/包名" 在原檔案中,如果某一個變數或者方法不屬於某一個類,則屬於該包。 匯入該包,就可以使用該方法
該工程需要在$GOPATH/src目錄下面 (建議GOPATH的第一個目錄)
13 golang的程式碼群組織單位為包
包由其匯出的類型和函數組成部分(Java以類為單位,Java匯入也可以具體到類)
golang包import只能到包,可以引用包到處的類型或者函數。
14 GOROOT和GOPATH區別
GOROOT是go的安裝目錄,
GOPATH下載第三方的依賴包和本地開發項目
http://www.jianshu.com/p/4e699ff478a5
GO安裝和常見命令
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.1.md
15 go get
使用命令go get可以下載一個單一的包或者用...下載整個子目錄裡面的每個包