Well, the Go runtime is written in Go itself. And you can write Go without the runtime, the same way the compiler is.
The hard part is that the runtime is indeed build on OS primitives (syscall mostly), that you have to implement yourself.
You have to forgo all the niceties of having a runtime but you can do it. Definitely not the most productive use of Go, but it's fun and you learn a lot.
That's a bit of a stretch. The runtime uses special pragmas that are not available to normal programs. I don't think it would be possible to write Go's GC in Go unless these special pragmas existed:
There is already a compiler that knows those special pragmas, one just needs to add a new bare-metal backed to it.
As for writing Go without a GC, just like in any other GC enabled systems programming language, by not using language features that require GC in the lowest layer, which the other packages then depend on.
The hard part is that the runtime is indeed build on OS primitives (syscall mostly), that you have to implement yourself.
You have to forgo all the niceties of having a runtime but you can do it. Definitely not the most productive use of Go, but it's fun and you learn a lot.