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

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

接受多種接口類型的數(shù)據(jù)類型

接受多種接口類型的數(shù)據(jù)類型

Go
MMTTMM 2022-06-01 12:31:19
我會(huì)盡力在這里解釋我的情況。所以,我正在為我的應(yīng)用程序創(chuàng)建一個(gè) DAL。它同時(shí)訪問(wèn)redis和mysql。redis接口如下:文件 NoSqlDBClient.go:type NosqlDb interface {     HGet() string}type NosqlClient struct {    key string}func GetNosqlClient() *NosqlClient{    return &NosqlClient{}}func (ns *NosqlClient) HGet()string {//actual implemenation would be different    return ns.key}文件 SqldbClient.go:type SqlDB interface {    ExecQuery()}type SqlClient struct {    query string}func GetsqlClient() *SqlClient{    return  &SqlClient{}}func (s *SqlClient) ExecQuery()string {    //actual implemenation would be different    return s.query}現(xiàn)在我需要實(shí)現(xiàn)一個(gè) DBClient Factory,它維護(hù)一個(gè) dbtype 和客戶端的映射。它是這樣的文件 DBClientFactory.gotype DBClientfactory struct {    clientmap[string] //what data type to use???}func GetNoSqlDBClient() NosqlDb{    client:=NoSqlDBClient.GetNosqlClient()    clientmap['nosql'] = client    return client}func GetSqlDBClient() SqlDB{    client:=SqlDBClient.GetsqlClient()    clientmap['sql'] = client    return client}問(wèn)題是如何在一張地圖中容納不同類型的客戶?我想定義另一個(gè)接口DBFactory,其中嵌入了其他兩個(gè)接口。但這顯然行不通,因?yàn)樗蟹椒ǘ疾皇怯蓡蝹€(gè)接口實(shí)現(xiàn)的。我該如何解決這個(gè)問(wèn)題?
查看完整描述

1 回答

?
智慧大石

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

您可以使用interface{}map 值類型,但是您會(huì)失去類型安全性,并且必須使用類型斷言或類型切換。


相反,您應(yīng)該使用 2 種不同的地圖類型,一種用于您要存儲(chǔ)的每個(gè)接口:


type DBClientfactory struct {

    nosqldbs map[string]NosqlDb

    sqldbs   map[string]SqlDB

}

并且每個(gè)函數(shù)或方法將使用適當(dāng)?shù)挠成?,GetNoSqlDBClient()將使用DBClientfactory.nosqldbs,GetSqlDBClient()并將使用DBClientfactory.sqldbs。


如果每個(gè)客戶端只有一個(gè)實(shí)例,則根本不要使用地圖,只需使用簡(jiǎn)單的字段:


type DBClientfactory struct {

    nosqldb NosqlDb

    sqldb   SqlDB

}


查看完整回答
反對(duì) 回復(fù) 2022-06-01
  • 1 回答
  • 0 關(guān)注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報(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)