国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - Golang極簡入門教程(二):方法和接口

Golang極簡入門教程(二):方法和接口

2019-11-17 19:25junjie Golang

這篇文章主要介紹了Golang極簡入門教程(二):方法和接口,本文同時講解了錯誤、匿名域等內容,需要的朋友可以參考下

方法

Golang 中沒有類,不過我們可以為結構體定義方法。我們看一個例子:

復制代碼代碼如下:

package main
 
import (
    "fmt"
    "math"
)
 
type Vertex struct {
    X, Y float64
}
 
// 結構體 Vertex 的方法
// 這里的方法接收者(method receiver)v 的類型為 *Vertex
func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
    v := &Vertex{3, 4}
    fmt.Println(v.Abs())
}

 

在這里方法的接收者使用指針類型而非值類型主要出于以下幾點考慮(類似 C/C++ 等語言):

1.避免方法每次調用時,對接收者的不必要的拷貝
2.在方法內可以修改接收者的值

我們可以為任意類型定義方法,但以下情況除外:

1.如果類型定義在其他包中,不能為其定義方法
2.如果類型是基礎類型,不能為其定義方法

 

復制代碼代碼如下:

package main
 
import (
    "fmt"
    "math"
)
 
// 定義一個類型 MyFloat
type MyFloat float64
 
// 注意此方法關聯的類型是 MyFloat 而不是 *MyFloat
func (f MyFloat) Abs() float64 {
    if f < 0 {
        return float64(-f)
    }
    return float64(f)
}
 
func main() {
    f := MyFloat(-math.Sqrt2)
    fmt.Println(f.Abs())
}

 

接口(interface)

接口也是一種類型(就像結構體一樣)。一個接口類型包含了一組方法,一個接口類型能夠持有那些實現了這些方法的值。范例:

復制代碼代碼如下:

// 定義接口 Abser
type Abser interface {
    Abs() float64
}
 
// 定義結構體 Vertex
type Vertex struct {
    X, Y float64
}
 
// 實現方法 Abs
func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
    v := Vertex{3, 4}
    // 成功,能夠持有 *Vertex 類型的值
    var a Abser = &v
    // 出錯,不能持有 Vertex 類型的值
    // 因為在 *Vertex 上定義了方法 Abs,而未在 Vertex 上定義
    var b Abser = v
}

 

錯誤

Golang 提供了一個 error 接口:

復制代碼代碼如下:

type error interface {
    Error() string
}

 

我們通過 os.Open 函數來了解一下 error 的用法:

復制代碼代碼如下:

// 此函數用于打開一個文件
// 返回的第二個值為 error 類型
func Open(name string) (file *File, err error)

 

簡單的例子:

復制代碼代碼如下:

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    _, err := os.Open("test.txt")
    // 如果 err 不為 nil 表示存在錯誤
    if err != nil {
        fmt.Println(err)
    }
}

 

創建一個 error 值的最簡單方式是使用 errors.New 函數:

復制代碼代碼如下:

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        // 出錯時返回一個錯誤
        return 0, errors.New("math: square root of negative number")
    }
    // ...
}


我們也可以定義一個新的 error 的實現(也就是實現接口 error):

復制代碼代碼如下:

type NegativeSqrtError float64
 
func (f NegativeSqrtError) Error() string {
    return fmt.Sprintf("math: square root of negative number %g", float64(f))
}

 

匿名域

結構體中可以存在只有類型而沒有名字的域,它們被叫做匿名域。例如:

復制代碼代碼如下:

struct {
    T1
    *T2
}

 

一個結構體的匿名域中的域或者方法可以被此結構體實例直接訪問:

復制代碼代碼如下:

package main
 
import "fmt"
 
type Car struct {
    wheelCount int
}
 
func (car *Car) numberOfWheels() int {
    return car.wheelCount
}
 
type Ferrari struct {
    Car
}
 
func main() {
    f := Ferrari{Car{4}}
    fmt.Println("A Ferrari has this many wheels: ", f.numberOfWheels())
}

延伸 · 閱讀

精彩推薦
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
主站蜘蛛池模板: 最近2019年好看中文字幕视频 | 国产精品com | 国产精品一区二区三区免费 | 亚洲视频精品在线 | 玖玖色资源 | 最近韩国日本免费高清观看 | 99精品欧美一区二区蜜桃免费 | 久久成人免费视频 | 久久久久久久久久久动漫 | 九九热欧美 | 欧美在线免费 | 在线中文字幕视频 | 精品一区在线视频 | 国内精品在线视频 | 日韩av免费在线 | 一本一本久久a久久精品综合妖精 | 久久精品夜夜夜夜夜久久 | 国产亚洲精品久久久久动 | 欧洲亚洲视频 | 欧美成人影院 | 亚洲第一色 | 国产精品福利在线 | 中文在线一区二区 | 欧美激情一区二区三区 | 91久久精品一区二区二区 | 国产精品去看片 | 久久久亚洲精 | 国产精品久久久久一区二区三区 | 99精品欧美一区二区三区 | 日韩欧美综合 | 日本福利视频 | 亚洲午夜精品片久久www慈禧 | 91精品国产综合久久久蜜臀粉嫩 | 国产毛片视频 | 国产综合精品一区二区三区 | 精品少妇一区二区三区日产乱码 | 在线第一页 | 国产欧美视频一区二区 | 亚洲成av人片在线观看 | 久久手机免费视频 | 国产精品综合视频 |