小编Few*_*rds的帖子

如何使用自定义验证器验证结构数据类型?

我正在用来go-playground/validator/v10验证一些输入,但在自定义验证标签和函数方面遇到了一些问题。问题在于,当结构体字段之一是不同的结构体时,不会调用该函数。这是一个例子:

type ChildStruct struct {
    Value int
}

type ParentStruct struct {
    Child ChildStruct `validate:"myValidate"`
}

func myValidate(fl validator.FieldLevel) bool {
    fmt.Println("INSIDE MY VALIDATOR") // <- This is never printed
    return false
}

func main() {
    validator := validator.New()
    validator.RegisterValidation("myValidate", myValidate)
    data := &ParentStruct{
        Child: ChildStruct{
            Value: 10,
        },
    }
    validateErr := validator.Struct(data)
    if validateErr != nil { // <- This is always nil since MyValidate is never called
        fmt.Println("GOT ERROR")
        fmt.Println(validateErr)
    }
    fmt.Println("DONE")
}
Run Code Online (Sandbox Code Playgroud)

如果我将parentStruct更改为:

type ParentStruct …
Run Code Online (Sandbox Code Playgroud)

go go-playground

8
推荐指数
1
解决办法
1万
查看次数

使用BluetoothLeScanner for android 时如何过滤制造商数据?

我正在使用我自己的 BLE 设备。在听完这些设备后我想使用时ScanFilter,所以我只得到我感兴趣的设备。我现在的解决方案是在回调内部进行过滤,但如果这种过滤可以更早发生并且根据规范应该会更好成为可能。我正在尝试过滤制造商的特定数据,但无法使其正常工作。这是我的代码:

BluetoothLeScanner bleScanner = bluetoothAdapter.getBluetoothLeScanner();
ScanFilter filter = getScanFilter();
List<ScanFilter> scanFilters = new ArrayList<>();
scanFilters.add(filter);
ScanSettings scanSettings = getScanSettings();
bleScanner.startScan(scanFilters, scanSettings, scanCallback);
Run Code Online (Sandbox Code Playgroud)

这是创建过滤器和设置的函数:

private ScanSetting getScanSettings(){
    ScanSettings.Builder builder = new ScanSettings.Builder();
    builder.setReportDelay(0);
    builder.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER);
    return builder.build();
}

private ScanFilter getScanFilter(){
    ScanFilter.Builder builder = new ScanFilter.Builder();
    ByteBuffer manData = ByteBuffer.allocate(6); //The sensors only sends 6 bytes right now
    ByteBuffer manMask = ByteBuffer.allocate(6);
    manData.put(0, (byte)0x50);
    manData.put(1, (byte)0x41);
    manData.put(2, (byte)0x43);
    manData.put(3, (byte)0x4b);
    manData.put(4, (byte)0x45);
    manData.put(5, (byte)0x54);
    for(int i = 0; …
Run Code Online (Sandbox Code Playgroud)

android bluetooth-lowenergy

5
推荐指数
1
解决办法
8104
查看次数

标签 统计

android ×1

bluetooth-lowenergy ×1

go ×1

go-playground ×1