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
相关产品推荐
相关产品推荐

