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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 語言中的多態(tài)性

Go 語言中的多態(tài)性

Go
元芳怎么了 2021-12-07 17:03:50
我正在學習 go lang,我想知道是否有辦法做這樣的事情:type Foo struct {   ...}type Bar struct {   Foo   ...}func getFoo() Foo {   return Bar{...}}在面向?qū)ο蟮恼Z言中,這樣的代碼應該可以正常工作,但是在 go 中它會拋出一個錯誤,說getFoo()必須返回類 Foo 的實例。有沒有辦法做類似于我在 Go 中描述的多態(tài)性?
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經(jīng)驗 獲得超2個贊

Go 不是典型的 OO 語言。此外,每種語言都有自己的做事方式。你可以使用界面和組合來實現(xiàn)你想要的,如下圖:


package main


import "fmt"


type Foo interface {

   printFoo()

}


type FooImpl struct {


}


type Bar struct {

   FooImpl

}


type Bar2 struct {

   FooImpl

}


func (f FooImpl)printFoo(){

    fmt.Println("Print Foo Impl")

}


func getFoo() Foo {

   return Bar{}

}


func main() {

    fmt.Println("Hello, playground")

    b := getFoo()

    b.printFoo()

}

http://play.golang.org/p/iR8QkD3DnP


查看完整回答
反對 回復 2021-12-07
?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊

在 Go 中,多態(tài)是通過實現(xiàn)接口來實現(xiàn)的。


type Being interface {

        somemethod()

}


type Foo struct {}


type Bar struct {

        Foo

}


type Baz struct {

        Foo

}


// `Bar` and `Baz` implement `Being`

func (b *Bar) somemethod() {}

func (b *Baz) somemethod() {}


func getAnyFoo(b *Being) Foo {

   return b.Foo

}

因此,任何東西都實現(xiàn)了一個空接口。


type Foo struct {}


type Bar struct {

        Foo

}


// Get anything and extract its `Foo` if anything is a Bar

func getAnyFoo(i interface{}) Foo {

        // Normally this would need a type switch to check the type

        mybar := i.(Bar)

        return mybar.Foo

}


查看完整回答
反對 回復 2021-12-07
?
心有法竹

TA貢獻1866條經(jīng)驗 獲得超5個贊

如果您知道要使用的類型,則可以將它們放入數(shù)組列表中以實現(xiàn)一種多態(tài)實例化:


package main

import (

  "fmt"

  "encoding/json"

)


type  Hans struct{

      Miau string

    }


type  Keule struct {

  Wuff string

}


func (K Keule)ppp() {

  fmt.Printf(K.Wuff)

}


func (K Hans)ppp() {

  fmt.Printf(K.Miau)

}


func (K Keule)TypeInfo() int {

  return 0

}


func (K Hans)TypeInfo() int {

  return 1

}


type Mega interface {

  ppp()

  TypeInfo() int

}



var j_a = `{

  "Kein_Alter": "nix",

  "Miau": "lala",

  "class": 0

}`


var j_b = `{

  "Alter": "nix",

  "Wuff": "lolo",

  "Class": 1

}`


type Class struct {

  Class int

}


func (K *Class)ppp() {

  fmt.Printf("%d", K.Class)

}


func Unmarshal_K(b []byte) (Mega, error) {

  var k Keule

  err := json.Unmarshal([]byte(j_a), &k)

  return k, err

}


func Unmarshal_H(b []byte) (Mega, error) {

  var k Hans

  err := json.Unmarshal([]byte(j_a), &k)

  return k, err

}


var UList = []func(b []byte) (Mega, error) {Unmarshal_H, Unmarshal_K}


func main() {

  var mv Class

  err := json.Unmarshal([]byte(j_a), &mv)

  if err != nil {

    panic(err)

  }

  


  hiho, err := UList[mv.Class]([]byte(j_a))

  if err != nil {

    panic(err)

  }



  hiho.ppp()

}


查看完整回答
反對 回復 2021-12-07
  • 3 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號