quanganht it is very possible, but does require a not so small amount of preliminary work. If you have never done OS development before then I recommend also build a toy kernel in C while you developing your Go kernel. There are many amazing tutorials online so make sure you spend just as much time reading as you do coding. To start you will need at least: a bootloader, a machine emulator, and a cross-compiler. It is worth while trying to make your own bootloader, but if you are feeling lazy just grab one of the samples on osdev. The machine emulator I definitely recommend bochs... mainly because most of the tutorials you will find online do their testing in bochs. The cross-compiler will be your biggest headache I recommend checking out
https://github.com/davecheney/golang-crosscompile and then read up on the gcc cross compiler (
http://wiki.osdev.org/GCC_Cross-Compiler). Remember gcc does support Go1
Rudster816 I was very disappointed with your post. You seem pretty misinformed as to the nature of the Go programming language, and what's worse is you seemed more concerned with shooting down quanganht's idea then with trying to answer the question. Below are some of my comments regarding your response:
I couldn't figure out if you could cast a integer type variable to a pointer
Yes you can, check out the unsafe package in the standard library. That being said just as C can directly invoke assembly functions so too can Go. Here is an excellent thread on the topic:
http://stackoverflow.com/questions/2951 ... le-go-code
you can link Go programs with C functions "carefully", so you could write some C stubs that do this stuff like this for you.
This is for linking against already created C programs until you can implement the functionality in Go. Since the point is for him to develop his own kernel there is no benefit here. There is no functionality available in C that is not available in Go. That being said if he does choose to link against C code there is absolutely no performance hit and I see no reason why you state it would be inefficient.
I also would most definitely not classify Go as in the same arena as C. I wont go as far as saying it isn't a low level language, as that would depend on the definition of low level, which is highly subjective.
Go is in exactly the same boat as C/C++ in terms of language level. The only argument that one might attempt posing is that it is garbage collected, but even this argument quickly fails with just a small amount of reading on the subject and looking at any of the "low level" functional programming languages.
With C99, you have nothing syntactically that was OS dependent. E.g. any valid C program that doesn't depend on the C library headers will run fine in a kernel like environment (bare metal). But even with languages like C++, with the new operator, you don't have to drag any headers\imports into the fray without mixing in the library as well.
Go is in exactly the same boat. There are two points to be aware of: a) You cannot use any code that links against the os package. b) Go routines cannot be used until you develop your own os library.
Go is an open source programming environment that makes it easy to build simple, reliable, and efficient software.
It is true that this is the new language description, but it is worth noting that this is a change. The original language description was: "Go is an agent oriented, concurrent, systems programming language". It's mission is to develop servers and systems software, and while they have no plans for developing an operating system, Rob Pike has often stated that Go would be a great language for developing operating systems and compilers.
Obviously thing's like "easy" and "simple" don't really belong in something like kernel development.
You are completely clouding the context in which "easy" and "simple" were being used. The team is referring to the ease of knowing what your code does because you only have to consider the code you are looking at. Nothing is hidden, compile times are fast, cyclic dependancies don't exist, and they enforce understanding in the rules of the language.. such as public identifiers must be capitalized.
In terms of kernel development, most languages's "conveniences" turn into nuisances
I would love to see this backed up with an example, because it seems like you are trying to generalize to the point of asserting a new truth.