go的學習記錄(一)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

近來由於部門想統一所有項目的服務端開發,即以後所有新開的項目均採用同一套架構,這樣有助於開發人員在參與多項目開發時完成低成本轉換。因此,技術方面通過由技術總監指定了一個同事作為該方面的推動者,推動以後新項目的語言與架構的選型。從目前的意見來看,語言選型可能往go語言方面轉換。因此本人也開始了go的學習。在學習過程中也發現了很多好玩的東西,權作記錄:

一、包的定義與引用

go語言同樣可以像java等語言定義包,但go對於包的定義是有嚴格要求的:

1. 在同一檔案夾下只能定義同一個包的代碼。如以下結構樹中,bubble.go,insert.go等檔案的代碼定義均使用package test_sort

src/
└── test_sort
    ├── bubble.go
    ├── insert.go
    ├── quick.go
    └── selection.go

2. 由於go語言的包的路徑檢索是通過GOPATH環境變數來指定的,因此即使是自己開發的包,也必須在GOPATH環境變數中指明才能使用。如使用命令:export GOPATH=$GOPATH:/home/haust/go或者在設定檔裡添加該環境變數,Linux下在使用者根目錄下添加上述語句,Windows下在系統內容變數裡添加GOPATH變數並定義內容或直接修改現有環境變數

3. 所引用的包的目錄必須包含src目錄,並且所有的包均包含在src目錄下才可以正確引用,否則編譯代碼時會提示無法找到包的定義

4. 在代碼中引用包通過import標識符指定,如果是單個包引用,可以直接使用import "fmt"這種方式,但若是多個包則必須使用:

import ( "fmt"                         import ( 

"math/rand") 或者"fmt"

"math/rand"

)

即每個包必須換行引用,否則程式將會報錯

二、變數的聲明與賦值

先貼幾行代碼:

var a int a = 3            //a 的先聲明後賦值var b int = 5     //b 在聲明的同時賦值c := 4               //c 聲明且賦值
在上述的三種聲明中,需要特別注意的是賦值符號的區別,對於添加var標誌聲明的變數和使用:=方式生命的變數不盡相同,後續在介紹數組的使用的時候會給大家展示

三、函數的定義

1. 在go中的包裡的函數定義中對外可見函數名首字母必須為大寫字母,其他函數名不做要求,詳見類型的定義

2. 函數定義必須以func標識符開始

3. 函數的傳回值定義在參數列表之後

4. 函數可以有多個傳回值,但多個傳回值時必須用()括起來

5. 在同一個包內,不能出現同名的函數

如:func Retself(a int) int//單傳回值聲明

func Retself(a int, b int) (int, int)//多傳回值聲明

四、類型定義

在go中雖然沒有類,但還是同樣會有類型定義,該類型的定義方式類同C++的類,但少有區別,如下:

type Rect struct {

width, height int

}

1. 類型的初始化是非常簡單的,在類型名的後面使用{}包住初始化列表即可。在go中支援兩種方式初始化

(1)具名初始化,如 rect := Rect{width:3, height:4}。這種初始化比較簡單也比較容易理解

(2)匿名初始化,如 rect := Rect{3, 4}。這種初始化方式是按照初始化列表和類型的成員一一對應初始化的,即產生的結果是width = 3, height = 4

2. 類型成員函數的定義

在go的類型定義中,同樣支援成員函數,以下為例:

func (rect Rect) area() int {

return rect.width * rect.height

}

其調用方式很簡單:即 rect.area()調用即可

五、介面定義

定義參考如下:

type Shape interface {       perim() int}type Rect struct {       width, height int}type Trian struct {       a, b, c int}func (r Rect) perim() int {       return 2*width + 2*height}func (t Trian) perim() int {       return a + b + c}

在使用中也是異常簡單的,如下:

func CalcPerim(s Shape) int {      return s.perim()}func main() {      rect := Rect{3, 4}      trian := Trian{1, 2, 3}      CalcPerim(rect)      CalcPerim(trian)}




相關文章

聯繫我們

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