На самом деле, у вас есть хорошая ссылка.Все, что вам сейчас нужно, это выбрать одну из предложенных реализаций.
Документацию по kernel32.SetConsoleTextAtribute
вы можете найти здесь: https://docs.microsoft.com/en-us/windows/console/setconsoletextattribute
Открытый API определен как:
BOOL WINAPI SetConsoleTextAttribute(
_In_ HANDLE hConsoleOutput,
_In_ WORD wAttributes
);
Пример для второго варианта (с использованием 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")
}