Go语言中创建BLE服务过滤数组是否有更简洁的实现方式?
问题解答
Go 支持更简洁的切片字面量写法,你需要的效果可以直接通过以下代码实现:
services, err := client.DiscoverServices([]ble.UUID{ble.MustParse("1820")}) for _, s := range services { fmt.Printf("%s\n", s.UUID) }
语法说明
你尝试写的 [ ble.MustParse("1820") ] 不符合 Go 的语法规范:
- Go 中
[T]前缀代表固定长度数组,需要显式指定长度,而 BLE 库的DiscoverServices方法接收的参数一般是可变长度切片,类型为[]ble.UUID - 构造切片字面量的标准格式为
[]元素类型{元素列表},可以直接 inline 写在参数位置,不需要提前声明变量再追加元素
如果需要过滤多个服务 UUID,直接在大括号里用逗号分隔元素即可:
services, err := client.DiscoverServices([]ble.UUID{ ble.MustParse("1820"), ble.MustParse("180F"), // 其他目标服务UUID })
如果该过滤规则会在多处复用,可以提前定义为包级变量,避免重复解析UUID,代码也更整洁:
// 包级提前定义目标服务UUID列表 var targetServiceFilters = []ble.UUID{ble.MustParse("1820")} // 业务逻辑中直接调用 services, err := client.DiscoverServices(targetServiceFilters)
内容的提问来源于stack exchange,提问作者Cliff
相关产品推荐
相关产品推荐

