01-golang簡介

來源:互聯網
上載者:User

目錄

  • 1、golang簡介
  • 2、安裝
  • 3、指標
  • 4、gotrace
  • 1、golang簡介
  • 2、安裝
    • 安裝atom
  • 3、指標
  • 4、gotrace

1、golang簡介

    google於2009年推出的系統程式設計語言

特點:

靜態編譯,沒有依賴
記憶體回收
簡潔的符號和文法
平坦的類型系統
基於CSP的並行存取模型,充分利用多核
高效簡單的工具鏈
豐富的標準庫

hello world:

package mainimport "fmt"func main() {    fmt.Println("hello world")}

web編程:

package mainimport (    "fmt"    "net/http")#w http.ResponseWriter左邊是參數名字,右邊是類型;*是指標func handler(w http.ResponseWriter,r *http.Request) {    fmt.Fprintf(w,"Hello world!")    #Fprintf意思是把"Hello world!"寫到w對象}func main() {    http.HandleFunc("/",handler)    http.ListenAndServe(":8080",nil)}

C10K問題:

func handle(conn net.Conn) {    fmt.Fprintf(conn, "%s", time.Now().String())    conn.Close()}func main() {    l,err := net.Listen("tcp",":8080")    if err != nil {        log.Fatal(err)    }    for {        conn,err := l.Accept()        if err != nil {            log.Fatal(err)        }        go handle(conn)     #開啟協程,並發    }}

並行和並發:

並發(concurrent)不是並行(parallel):node.js具有並發的能力,但不能充分利用多核(並行)
寫出一個能充分利用多核的程式需要很深的系統編程積澱
得益於優秀的設計,go可以輕鬆地寫出跑滿所有cpu的程式

python多線程是偽線程(受一個全域鎖限制),不能利用多核
python多進程呢?
python的協程呢?

2、安裝

軟體包:
go1.10.1.windows-amd64.zip win
go1.10.1.darwin-amd64.tar.gz OS

配置環境變數:

GOROOT放置go的標準庫和工具鏈    $HOME/local/go   (linux,mac)    c:\local\go      (win)GOPATH放置第三方代碼和自己的工程    $HOME/go         (linux,mac)    c:\go            (win)PATH    export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

vim hello.go

package mainimport "fmt"func main() {    fmt.Println("hello world")}

go run hello.go #會列印出hello world
go build hello.go #會產生一個hello.exe可執行檔,在cmd下執行,和go run的效果一樣
linux或者mac上,可以執行:
    GOOS=darwin go build -o hello.mac hello.go
    GOOS=windows go build -o hello.exe hello.go
    GOOS=linux go build -o hello.linux hello.go
windows上:
    C:\go>set GOOS=windows
    C:\go>go build hello.go #設定環境變數,然後編譯

安裝atom

安裝外掛程式go-plus

gofmt -w hello.go #將代碼格式化

手動安裝工具:

goimports  -w hello.go  #自動引用包,需要額外安裝cd $GOPATH && mkdir -p src/golang.org/xcd $GOPATH/src/golang.org/xgit clone https://github.com/golang/tools.git  #可以去github上下載,然後解壓,並重新命名為toolsgo install golang.org/x/tools/cmd/goimports #在GOPATH/bin目錄下產生了goimports的可執行檔

利用atom自動安裝,安裝go-plus自動安裝,但是要FQ!同時依賴git用戶端
因此會提示:

$ go get -u golang.org/x/tools/cmd/goimports$ go get -u golang.org/x/tools/cmd/gorename$ go get -u github.com/sqs/goreturns$ go get -u github.com/nsf/gocode$ go get -u github.com/alecthomas/gometalinter$ go get -u github.com/zmb3/gogetdoc$ go get -u github.com/zmb3/goaddimport$ go get -u github.com/rogpeppe/godef$ go get -u golang.org/x/tools/cmd/guru$ go get -u github.com/fatih/gomodifytags$ go get -u github.com/tpng/gopkgs從github上將上面的diamante下載下來,除了x/tools相關工具,解壓到$GOPATH/src/github.com對應目錄下,並重新命名然後手動用go install ...安裝,重啟atom,ok

GOPATH目錄結構:

bin   #編譯產生的可執行檔pkg   #src   #源碼,全域唯一    github.com #放置github的項目        繼續下面就是使用者名稱            最後就是項目名#依賴git命令,-d參數是只下載不安裝,-u是通過網路更新軟體及其依賴go get : Get downloads the packages named by the import paths, along with their dependencies. It then installs the named packages, like 'go install'.go get -d github.com/51reboot/golang-01-homeworkcd $GOPATH/src/github.com/51reboot/golang-01-homework

常用工具:

編譯: go build測試: go test下載更新依賴並編譯: go get自動文檔工具: godoc -http=:9090,然後訪問本地9090連接埠線上查看文檔: godoc.org/github.com/golang/protobuf/proto

3、指標

package mainimport "fmt"func main() {    var x int    x = 1    var y int    y = 3    var p *int       //*是指標的意思    p = &x           //&是取地址的意思,p的值是儲存x的地址    fmt.Println("p=", p)    fmt.Println("*p=", *p)  //*是取p指標指向的值    fmt.Println("x=", x)    *p = 2    fmt.Println(x)    p = &y    fmt.Println("*p=",*p)}

指標是操縱變數的變數。
直接傳變數,內容太大
需要一個通用的變數能修改一類變數

文法:

*T即為類型T的指標,T可以是任何類型、包括指標類型&t即為取變數t的地址,指標本來指向的就是記憶體中一塊地址,是一串數字,但是編譯器不允許隨便指定指標為一串數字*p即為取指標變數所執行的內容
package mainimport "fmt"func main() {    var x int    x = 1    add(x)    fmt.Println("x=",x)    addpointer(x)    fmt.Println("x=",x)}func add(q int) {      //將x賦值給p變數    q = q + 1          //p變數值是2,但是x變數還是1,python中也一樣,不過沒有下面的用法}func addpointer(r *int) {     //r是指標,指向x變數    r = *r + 1                //r指向(r指向的值+1)}

Go中變數就是記憶體中的一塊地址儲存的內容,指標是指向此地址的變數
Python中傳參就沒有傳入指標的說法了。

4、gotrace

https://github.com/divan/gotrace

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.