您可以使用指针:
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)
}
}