Go語言【第十四篇】:Go語言基礎總結

來源:互聯網
上載者:User

標籤:expr   variable   port   處理機   source   資訊   float   main   實現   

Go語言類型轉換

類型轉換用於將一種資料類型的變數轉換為另外一種類型的變數,Go語言類型轉換基本格式如下:

type_name(expression)

type_name為類型,expression為運算式。
執行個體
以下執行個體中將整形轉化為浮點型,並計算結果,將結果賦值給浮點型變數:

package mainimport "fmt"func main() {   var sum int = 17   var count int = 5   var mean float32      mean = float32(sum)/float32(count)   fmt.Printf("mean 的值為: %f\n",mean)}

以上執行個體輸出結果為:

mean 的值為: 3.400000
Go語言介面

Go語言提供了另外一種資料類型即介面,它把所有的具有共性的方法定義在一起,任何其他類型只要實現了這些方法就是實現了這個介面。
執行個體

/* 定義介面 */type interface_name interface {   method_name1 [return_type]   method_name2 [return_type]   method_name3 [return_type]   ...   method_namen [return_type]}/* 定義結構體 */type struct_name struct {   /* variables */}/* 實現介面方法 */func (struct_name_variable struct_name) method_name1() [return_type] {   /* 方法實現 */}...func (struct_name_variable struct_name) method_namen() [return_type] {   /* 方法實現*/}

執行個體

package mainimport (    "fmt")type Phone interface {    call()}type NokiaPhone struct {}func (nokiaPhone NokiaPhone) call() {    fmt.Println("I am Nokia, I can call you!")}type IPhone struct {}func (iPhone IPhone) call() {    fmt.Println("I am iPhone, I can call you!")}func main() {    var phone Phone    phone = new(NokiaPhone)    phone.call()    phone = new(IPhone)    phone.call()}

在上面的例子中,我們定義了一個介面Phone,介面裡面有一個方法call()。然後我們在main函數裡面定義了一個Phone類型變數,並分別為之賦值為NokiaPhone和IPhone。然後調用call()方法,輸出結果如下:

I am Nokia, I can call you!I am iPhone, I can call you!
Go錯誤處理

Go語言通過內建的錯誤介面提供了非常簡單的錯誤處理機制,error類型是一個介面類型,這是它的定義:

type error interface {    Error() string}

我們可以在編碼中通過實現error介面類型來建置錯誤資訊,函數通常在最後的傳回值中返回錯誤資訊,使用error.New可返回一個錯誤資訊:

func Sqrt(f float64) (float64, error) {    if f < 0 {        return 0, errors.New("math: square root of negative number")    }    // 實現}

在下面的例子中,我們在調用Sqrt的時候傳遞的一個負數,然後就得到了non-nil的error對象,將此對象與nil比較,結果為true,所以fmt.PrintIn(fmt包在處理error時會調用Error方法)被調用,以輸出錯誤,請看下面調用的範例程式碼:

result, err := Sqrt(-1)if err != nil {    fmt.PrintIn(err)}

執行個體

package mainimport (    "fmt")// 定義一個 DivideError 結構type DivideError struct {    dividee int    divider int}// 實現 `error` 介面func (de *DivideError) Error() string {    strFormat := `    Cannot proceed, the divider is zero.    dividee: %d    divider: 0`    return fmt.Sprintf(strFormat, de.dividee)}// 定義 `int` 類型除法運算的函數func Divide(varDividee int, varDivider int) (result int, errorMsg string) {    if varDivider == 0 {        dData := DivideError{            dividee: varDividee,            divider: varDivider,        }        errorMsg = dData.Error()        return    } else {        return varDividee / varDivider, ""    }}func main() {    // 正常情況    if result, errorMsg := Divide(100, 10); errorMsg == "" {        fmt.Println("100/10 = ", result)    }    // 當被除數為零的時候會返回錯誤資訊    if _, errorMsg := Divide(100, 0); errorMsg != "" {        fmt.Println("errorMsg is: ", errorMsg)    }}

以上執行個體運行結果為:

100/10 =  10errorMsg is:      Cannot proceed, the divider is zero.    dividee: 100    divider: 0

至此,Go語言的基礎部分已經分享完了,後面還會繼續分享Go語言的深入部分,請期待...

Go語言【第十四篇】:Go語言基礎總結

相關文章

聯繫我們

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