You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中如何优雅检查切片元素满足条件?以[16]byte全零检查为例

在Go语言中检查元素是否全部满足条件的优雅实现

针对[16]byte数组判断全为0的最简方式

对于固定长度的[16]byte数组,利用Go数组是值类型的特性,直接和全零字面量数组比较是最简洁高效的方案:

package main

import "fmt"

func main() {
    arr := [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}
    isAllZero := arr == [16]byte{} // 全零数组字面量
    fmt.Println(isAllZero) // 输出: false
}

这种方式依赖Go对数组值的直接内存比较,性能比手动循环更优,代码也最简洁。

通用场景:检查切片/数组所有元素满足自定义条件

Go标准库没有内置类似JavaScriptevery的方法,但可以实现一个泛型函数(Go 1.18+支持泛型)来适配任意类型的切片:

package main

import "fmt"

// Every 检查切片中所有元素是否满足给定条件
func Every[T any](slice []T, condition func(T) bool) bool {
    for _, elem := range slice {
        if !condition(elem) {
            return false
        }
    }
    return true
}

func main() {
    // 示例1:检查byte切片全为0
    byteSlice := []byte{0, 0, 0, 1}
    isAllZero := Every(byteSlice, func(b byte) bool {
        return b == 0
    })
    fmt.Println(isAllZero) // 输出: false

    // 示例2:检查int切片全为偶数
    intSlice := []int{2, 4, 6, 8}
    allEven := Every(intSlice, func(n int) bool {
        return n%2 == 0
    })
    fmt.Println(allEven) // 输出: true
}

如果是数组类型,可通过arr[:]转换为切片后传入函数。若你的Go版本低于1.18(不支持泛型),可以针对具体类型写专用函数,比如针对[]byte的:

func AllBytesZero(slice []byte) bool {
    for _, b := range slice {
        if b != 0 {
            return false
        }
    }
    return true
}

内容的提问来源于stack exchange,提问作者i.brod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:20:32