登录
首页 >  Golang >  Go问答

避免重复执行相同功能的方法

来源:stackoverflow

时间:2024-03-06 10:39:27 207浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《避免重复执行相同功能的方法》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我有 n 个返回不同类型切片的函数。

所有返回的类型都有一个方法:func (t *t)getname() string

我无法控制这些功能。

现在我尝试将 n 个函数合并为 1:

我创建了一个只有 1 个方法 getname() 的接口,但出现错误

package main

import (
    //"fmt"
)


type a struct{
}
func (a *a) getname() string {
return "a"
}

type b struct{
}

func (b *b) getname() string {
return "b"
}

type alphabet interface{
  getname() string
}

func main() {
}
func returna() alphabet{
a := &a{} 
return a
}

func returnas()[]alphabet{
return []*a{&a{},&a{},&a{}}
}

这里 returna 工作正常,但 returnas 给出编译错误:

prog.go:46:12:无法使用 []*a 文字(类型 []*a)作为返回参数 中的 []alphabet 类型

https://play.golang.org/p/zwuhig31ge5

更新:

抱歉,我没有清楚地解释我的情况,

我有 n 个返回不同类型切片的函数。

我现在使用 n 个包装函数从原始函数返回值。

我目前拥有的:

func returnas()[]*a{
    as := givemeas() // givemeas() returns []*a 
    return as
}

func returnbs()[]*b{
    bs := givemebs() // givemebs() returns []*b 
    return bs
}

我想要什么:

func returnAlphabet(s string)[]Alphabet {
   switch s{
   case "A":
   return giveMeAs()
   case "B":
   return giveMeBs()
   //...
   }
}

我不擅长设计模式,我只是觉得这样写对调用者(我自己)来说可能更容易


解决方案


您的函数返回一个接口切片,因此这就是您需要构造的。你想要的是。

func returnAs() []Alphabet {
    return []Alphabet{&A{},&A{},&A{}}
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>