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

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

從不同的包實(shí)現(xiàn)接口(從其他模塊回調(diào))

從不同的包實(shí)現(xiàn)接口(從其他模塊回調(diào))

Go
慕森卡 2023-05-15 09:50:06
在 NodeJS 中,我可以在一處聲明回調(diào)并在一處使用它,以避免破壞項(xiàng)目的結(jié)構(gòu)。一個(gè).jsmodule.exports = class A(){    constructor(name, callback){        this.name = name;        this.callback = callback;    }    doSomeThingWithName(name){        this.name = name;        if(this.callback){            this.callback();        }    }}B.jsconst A = require(./A);newA = new A("KimKim", ()=> console.log("Say Oyeah!"));在 Go 中,我也想用接口和實(shí)現(xiàn)來(lái)做同樣的事情。前type canDoSomething interface {    DoSomething()}type AStruct struct {    name string    callback canDoSomething}func (a *AStruct) DoSomeThingWithName(name string){    a.name = name;    a.callback.DoSomething()}B.goimport (A);newA = A{}newA.DoSomeThingWithName("KimKim");我可以覆蓋文件 B.go 中接口函數(shù)的邏輯嗎?我該怎么做才能使它們等同于 NodeJS 的樣式?我試試import (A);newA = A{}// I want//newA.callback.DoSomething = func(){}...// or// func (a *AStruct) DoSomething(){}...// :/newA.DoSomeThingWithName("KimKim");
查看完整描述

2 回答

?
暮色呼如

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

我可以覆蓋文件 B.go 中接口函數(shù)的邏輯嗎?


不,Go(和其他語(yǔ)言)中的接口沒(méi)有任何邏輯或?qū)崿F(xiàn)。


在 Go 中實(shí)現(xiàn)一個(gè)接口,我們只需要實(shí)現(xiàn)接口中的所有方法即可。


A 和 B 類型如何實(shí)現(xiàn)具有不同邏輯的相同接口:


type Doer interface {

    Do(string)

}


type A struct {

    name string

}

func (a *A) Do(name string){

    a.name = name;

    // do one thing

}


type B struct {

    name string

}

func (b *B) Do(name string){

    b.name = name;

    // do another thing

}


查看完整回答
反對(duì) 回復(fù) 2023-05-15
?
子衿沉夜

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

函數(shù)是 Go 中的第一類值,就像它們?cè)?JavaScript 中一樣。您在這里不需要界面(除非您沒(méi)有說(shuō)明其他目標(biāo)):


type A struct {

    name string

    callback func()

}


func (a *A) DoSomeThingWithName(name string){

    a.name = name;

    a.callback()

}


func main() {

    a := &A{

        callback: func() { /* ... */ },

    }


    a.DoSomeThingWithName("KimKim")

}

由于所有類型都可以有方法,所以所有類型(包括函數(shù)類型)都可以實(shí)現(xiàn)接口。所以如果你真的想要,你可以讓 A 依賴于一個(gè)接口并定義一個(gè)函數(shù)類型來(lái)提供即時(shí)實(shí)現(xiàn):


type Doer interface {

    Do()

}


// DoerFunc is a function type that turns any func() into a Doer.

type DoerFunc func()


// Do implements Doer

func (f DoerFunc) Do() { f() }


type A struct {

    name     string

    callback Doer

}


func (a *A) DoSomeThingWithName(name string) {

    a.name = name

    a.callback.Do()

}


func main() {

    a := &A{

        callback: DoerFunc(func() { /* ... */ }),

    }


    a.DoSomeThingWithName("KimKim")

}


查看完整回答
反對(duì) 回復(fù) 2023-05-15
  • 2 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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