Go從初學到精通遇到的問題匯總

來源:互聯網
上載者:User

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可以下載一個單一的包或者用...下載整個子目錄裡面的每個包



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.