第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

main 函數(shù)是否運(yùn)行一個(gè) goroutine?

main 函數(shù)是否運(yùn)行一個(gè) goroutine?

Go
翻過高山走不出你 2023-05-08 18:01:33
為什么我們要在結(jié)構(gòu)的類型定義之外聲明方法?例如:type antenna struct {    name string    length float32    girth float32    bloodtype string}func (p *antenna) extend() {    p.length += 10}在我看來,該方法可能是結(jié)構(gòu)的一部分?(讓我們暫時(shí)忽略結(jié)構(gòu)應(yīng)該是值類型)type antenna struct {    name string    length float32    girth float32    bloodtype string    func extend() {        length += 10    }}這將更類似于傳統(tǒng)的 OOP。除了“結(jié)構(gòu)是值類型而類是引用類型”之外,我沒有找到任何很好的解釋為什么它是這樣完成的。我知道其中的區(qū)別,但這對(duì)我來說不是一個(gè)令人滿意的答案。無論如何都必須像這樣調(diào)用該方法:var x = antenna()x.extend() 那么將結(jié)構(gòu)和方法分開有什么意義呢?讓它們?cè)诖a中直觀地組合在一起——就像在典型的 OOP 語言中一樣——對(duì)我來說似乎有用嗎?
查看完整描述

1 回答

?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊

TLR:代碼重用一致性。

1 - 這可以重用方法
這是 Go 中類型的關(guān)鍵設(shè)計(jì)原則interface- 讓我用一個(gè)例子更清楚地說明:考慮你需要對(duì)一片進(jìn)行排序(在這里int嘗試):

? a := []int{1, 3, 2, 5, 4}

? ? sort.Ints(a)? ?// sort.Sort(sort.IntSlice(a))

? ? fmt.Println(a) // [1 2 3 4 5]

您只需調(diào)用sort.Ints(a)which 然后Sort(IntSlice(a))在標(biāo)準(zhǔn)庫中調(diào)用:


type IntSlice []int


func (x IntSlice) Len() int? ? ? ? ? ?{ return len(x) }

func (x IntSlice) Less(i, j int) bool { return x[i] < x[j] }

func (x IntSlice) Swap(i, j int)? ? ? { x[i], x[j] = x[j], x[i] }

sort.IntSlice sort.Interface將: Len、Less和的 3 種方法附加Swap到類型[]int, 以調(diào)用:


// Sort sorts data in ascending order as determined by the Less method.

// It makes one call to data.Len to determine n and O(n*log(n)) calls to

// data.Less and data.Swap. The sort is not guaranteed to be stable.

func Sort(data Interface) {

? ? n := data.Len()

? ? quickSort(data, 0, n, maxDepth(n))

}

因此,您可以重用標(biāo)準(zhǔn)庫中的方法,而無需再次重新實(shí)現(xiàn)它。


2-您可以定義自己的類型,請(qǐng)參見此示例-此命名類型在此處沒有內(nèi)部-因此方法必須在該類型之外:


package main


import "fmt"


type num int32


func (p *num) inc() {

? ? *p++

}


func main() {

? ? p := num(100)

? ? p.inc()

? ? fmt.Println(p) // 101

}

上面命名的類型 num與這個(gè)用戶定義的類型:通過設(shè)計(jì),這使得兩種類型的Go 語言保持一致:



type Animal struct {

? ? Name? string

? ? moves []move.Direction

}


func (p *Animal) Walk(dir move.Direction) {

? ? p.moves = append(p.moves, dir)

}


查看完整回答
反對(duì) 回復(fù) 2023-05-08
  • 1 回答
  • 0 關(guān)注
  • 140 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)