前兆:我刚开始被golang弄湿了脚.

这可能被证明是一个愚蠢的问题,因为执行这些计算很容易,但我还是要问它,因为我在谷歌搜索时没有找到答案.

是否有内置函数返回整型参数片段的最小值:

func MinIntSlice(v []int) (m int) {
    if len(v) > 0 {
        m = v[0]
    }
    for i := 1; i < len(v); i++ {
        if v[i] < m {
            m = v[i]
        }
    }
    return
}

或可变数量的整型参数的最小值:

func MinIntVarible(v1 int, vn ...int) (m int) {
    m = v1
    for i := 0; i < len(vn); i++ {
        if vn[i] < m {
            m = vn[i]
        }
    }
    return
}

如果不是,最好的"约定"是简单地创建一个包含这样的帮助器的包吗?

推荐答案

它没有内置的功能.

如果只在一个包中需要此功能,则可以编写一个未导出的功能(例如minIntSlice).

如果您在多个包中需要此功能,您可以创建一个包并在其中放置类似的功能.您应该考虑将此包设为内部包(https://golang.org/s/go14internal).

以下是一些如何改进代码的建议:

  1. 对于空切片,MinIntSlice将返回0.但是,0也是有效的最小元素.我认为在一块空块上呼唤panic 是一个更好的 Select .

  2. 使用范围循环:

    for i, e := range v {
        if i==0 || e < m {
            m = e
        }
    }
    

通过不给出值的索引,它将给出最小值0,该值可能不会出现在给定值中,因此您还必须对索引应用条件.

Go相关问答推荐

为什么使用append时Go切片的初始容量会随着int32和int64类型的不同而变化?

如何将泛型函数作为参数传递给golang中的另一个函数?

如何在AWS SDK Go v2 STS上正确使用重试

带有条件的for循环中缺少RETURN语句

如何防止程序B存档/删除围棋中程序A当前打开的文件?

转到http服务器头内容-类型设置为多部分/表单-数据,但在客户端获取内容-类型:文本/纯文本

go grpc:无法导入github.com/golang/protobuf/proto(没有所需的模块提供包github.com/gorang/protobuf-proto)

这是go语言gin提供的关于TypeEngine和RouterGroup的问题

如何使用gosdk在Dynamodb中进行UpdateItem时,将ValueBuilder对象声明为StringSet类型?

使用GOTK3和librsvg在Go中如何加载内联SVG?

以编程方式取消 pyspark dataproc 批处理作业(job)

通过多阶段构建复制到 Docker 容器中时找不到文件

甚至用天真的洗牌分配?

在 .go 文件中运行一个函数和在 Go 模板中调用它有什么区别?

使用 Grafana alert 在几分钟内重复alert

接受通道和切片的通用函数

在 Go 中将指针传递给函数的正确方法是什么,以便我可以读取和/或修改指针表示的值?

在 Go 中将十六进制转换为带符号的 Int

Terraform 自定义提供程序 - 数据源架构

退格字符在围棋操场中不起作用