Go has some inlining, but it is fairly primitive compared to gcc. Even Java does better. Inlining is a very important part of an optimizing compiler... There are design reasons why Go might never match C with respect to function inlining.
Bounds checking is still expensive in Go compare to Java... to say nothing of C. That might get quite a bit better over time as there is no reason for Go to do poorly in this respect.
And if your code needs to call a C or C++ library (like, say, a video driver), Go makes you pay a high price. This might get a bit better, but only to a point.
Go will never be as fast as C. Whether this matters is another story.
Go has some inlining, but it is fairly primitive compared to gcc. Even Java does better. Inlining is a very important part of an optimizing compiler... There are design reasons why Go might never match C with respect to function inlining. Bounds checking is still expensive in Go compare to Java... to say nothing of C. That might get quite a bit better over time as there is no reason for Go to do poorly in this respect. And if your code needs to call a C or C++ library (like, say, a video driver), Go makes you pay a high price. This might get a bit better, but only to a point. Go will never be as fast as C. Whether this matters is another story.