Actually the link you have is a good reference.
All you need now is choose one of the implementations proposed.
You can find the documentation for kernel32.SetConsoleTextAtribute
here: https://learn.microsoft.com/en-us/windows/console/setconsoletextattribute
The exposed API is defined as:
BOOL WINAPI SetConsoleTextAttribute(
_In_ HANDLE hConsoleOutput,
_In_ WORD wAttributes
);
Example for the second option (using syscall.NewProc
):
package main
import (
"os"
"syscall"
)
const (
// defined base colors
ForegroundBlue uint = 1
ForegroundGreen uint = 2
ForegroundRed uint = 4
ForegroundIntensity uint = 8
BackgroundBlue uint = 16
BackgroundGreen uint = 32
BackgroundRed uint = 64
BackgroundIntensity uint = 128
// colors can also be mixed
ForegroundGrey = ForegroundBlue | ForegroundGreen | ForegroundRed
ForegroundWhite = ForegroundBlue | ForegroundGreen | ForegroundRed | ForegroundIntensity
)
func main() {
kernel32 := syscall.NewLazyDLL("kernel32.dll")
setConsoleTextAttribute := kernel32.NewProc("SetConsoleTextAttribute")
stdOutHandle := os.Stdout.Fd()
attributes := ForegroundWhite | BackgroundRed
ret, _, err := setConsoleTextAttribute.Call(stdOutHandle, uintptr(attributes))
if err != nil {
panic(err) // calling kernel32.SetConsoleTextAttribute failed
}
if ret == 0 {
print("Could not set the desired attributes")
// TODO: call GetLastError to get more information
}
print("OK")
}