The fan’s speed can be controlled with a PWM via its duty cycle.
Fan’s motor draw more current than what a GPIO pin can normally provide. So an amplifier like a L2930 should be used to drive the fan.
This can be done via GPIO pins.
Note: The PWM support is still iffy at best on the Raspberry Pi, and this must be run as root.
import (
    "log"
    "time"
    "periph.io/x/conn/v3/gpio"
    "periph.io/x/conn/v3/gpio/gpioreg"
    "periph.io/x/conn/v3/physic"
    "periph.io/x/host/v3"
)
// Start starts the Fan.
func Start(pin gpio.PinIO) {
    // Generate a 33% duty cycle 10KHz signal.
    if err := pin.PWM(gpio.DutyMax/3, 440*physic.Hertz); err != nil {
        log.Fatal(err)
    }
}
// Stop stops the Fan.
func Stop(pin gpio.PinIO) {
    if err := pin.Halt(); err != nil {
        log.Fatal(err)
    }
}
func main() {
    // Make sure periph is initialized.
    if _, err := host.Init(); err != nil {
        log.Fatal(err)
    }
    // Use gpioreg GPIO pin registry to find a GPIO pin by name.
    pin := gpioreg.ByName("GPIO6")
    // start the fan
    Start(pin)
    // stop the fan after 10 seconds
    time.Sleep(10*time.Second)
    Stop(pin)
}
The periph authors do not endorse any specific seller. These are only provided for your convenience.