亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

傳遞多種參數類型的 Golang 習慣用法

傳遞多種參數類型的 Golang 習慣用法

Go
慕標琳琳 2022-10-10 19:02:04
我是學習 Go 的新手,并且有一個關于定義可能是兩種類型之一的論點的問題。拿下代碼:type Thing struct {  a int  b int  c string  d string}type OtherThing struct {  e int  f int  c string  d string}func doSomething(t Thing/OtherThing) error {  fmt.println(t.d)  return nil}由于結構沒有功能,我目前無法為它們編寫接口。那么這里的 Go 慣用的事情是什么?是否只是將隨機函數附加到結構并編寫接口或其他東西?謝謝您的幫助...
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

為這兩種類型聲明一個具有通用功能的接口。使用接口類型作為參數類型。


// Der gets d values.

type Der interface {

  D() string

}


type Thing struct {

  a int

  b int

  c string

  d string

}


func (t Thing) D() string { return t.d }


type OtherThing struct {

  e int

  f int

  c string

  d string

}


func (t OtherThing) D() string { return t.d }



func doSomething(t Der) error {

  fmt.Println(t.D())

  return nil

}


查看完整回答
反對 回復 2022-10-10
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

您可以通過從基本結構組合它們來為兩個結構提供一些共享功能:


package main


import (

    "fmt"

)


// Der gets d values.

type Der interface {

    D() string

}


type DBase struct {

    d string

}


func (t DBase) D() string { return t.d }


type Thing struct {

    DBase

    a int

    b int

    c string

}


type OtherThing struct {

    DBase

    e int

    f int

    c string

}


func doSomething(t Der) error {

    fmt.Println(t.D())

    return nil

}


func main() {

    doSomething(Thing{DBase: DBase{"hello"}})

    doSomething(OtherThing{DBase: DBase{"world"}})

}

DBase為 和提供字段 ( d) 并以Der相同的方式滿足接口。它確實使結構文字的定義時間更長。ThingOtherThing


查看完整回答
反對 回復 2022-10-10
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

您可以使用interface{}參數和反射包來訪問公共字段。很多人會說這種做法不地道。

func doSomething(t interface{}) error {
    d := reflect.ValueOf(t).FieldByName("d").String()
    fmt.Println(d)
    return nil}

在操場上嘗試一個例子


查看完整回答
反對 回復 2022-10-10
  • 3 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號