I know this answer is late to the party, but I have a bit more to add.
Go is significantly higher-level than C/C++/D: it has no manual memory management, has a significant runtime environment, and uses more memory in general. You wouldn't want to write a kernel in Go because you'd have to port the (large) runtime to kernel space first. If you did, you'd probably run into some difficult-to-resolve performance issues as Go is not as CPU-friendly as C.
I believe D is meant mainly as a replacement for C++. C++'s role has largely been as a user-level systems/library programming language. Partly, this is because C was already dominant in the kernel when C++ started becoming popular. The other part is that the C++ runtime, while mostly limited to the memory allocator, has to be ported to the kernel as well. There have certainly been many C++ projects in kernel space, but it is not dominant there.
D has positioned itself to be an excellent library-writing language, and limited its in-kernel usefulness by requiring a larger runtime than C++ (or certainly than C). If you strip it down a bit (no GC, no standard libraries, no thread-scoped variables, some significant unsafe code segments, ...) you can make it run in the kernel easily, but then you're getting rid of many of its improvements over C++.
However, its performance characteristics and the ability to write low-level code are excellent and (more or less) match those of C or C++. I would especially recommend it for user-level projects, but there are some great things it can add to a kernel project as well (even if some of its nicest features aren't easily accessible there).