在这种情况下,采用可选参数的最佳方法是什么? 我在库中具有一个函数,可以修改给定的光的状态。当输入模式闪烁时,我想允许呼叫者在时间,时间,休息时间和其他一些

问题描述 投票:0回答:0

您可以使用指针:


type Flashing struct {
    LedOnTime    int
    LedOffTime   int
    LoopTimes    int
    IntervalTime int
}

func (p *Printer) Light(light _light.Light, mode _light.Mode, flashing *Flashing) error {
    // This light_mode is currently believed to be deprecated, leaving here commented in case it ends up being useful later.
    //command, err := mqtt.NewCommand(mqtt.System).AddCommandField("light_mode").AddParamField("on").JSON()
    //if err != nil {
    //  return err
    //}

    // https://github.com/Doridian/OpenBambuAPI/blob/main/mqtt.md#systemledctrl
    command := mqtt.NewCommand(mqtt.System).AddCommandField("ledctrl").AddField("led_node", light).AddField("led_mode", mode)
    // Add fields only used for mode "flashing" but required nonetheless
    if flashing != nil {
        command.AddField("led_on_time", flashing.LedOnTime)
        command.AddField("led_off_time", flashing.LedOffTime)
        command.AddField("loop_times", flashing.LoopTimes)
        command.AddField("interval_time", flashing.IntervalTime)
    }

    if err := p.mqttClient.Publish(command); err != nil {
        return fmt.Errorf("error setting light %s: %w", light, err)
    }

    return nil
}

func main() {
    p := Printer{}
    err := p.Light(_light.Strong, _light.Normal, nil)
    if err != nil {
        log.Fatalln(err)
    }
    err = p.Light(_light.Weak, _light.Flashing, &Flashing{500, 500, 1, 1000})
    if err != nil {
        log.Fatalln(err)
    }
}

go variadic-functions
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.