IMPORTANT UPDATE:
The final answer , of course, is the one you received from Russ Cox , one of the authors of Go, on the golang-nuts mailing list. However, I leave some of my previous notes below, they can help to understand some things.
In addition, after reading this answer above, I believe that the pseudo-slash ā can now be converted to normal / slash (for example, middot translates to a point) in newer versions of the Go C compiler than the one I tested below, but I donāt have time to check.
The file is compiled The Go Language Suite internal compiler , which occurs in the Plan 9 C (1) (2) compiler and has some differences (mainly extensions, AFAIK) to the C standard.
One of the extensions is that it allows UTF-8 characters in identifiers.
Now, in the Go Language Suite C compiler, the middot (Ā·) character is handled in a special way, because it is converted to a regular dot (.) In object files, which is interpreted by the Go language Suite internal linker as a namespace delimiter character.
Example
For the following example.c file (note: it should be saved as UTF-8 without specification):
void Ā· Bar1 () {}
void foo Ā· bar2 () {}
void foo ā baz Ā· bar3 () {}
the internal C compiler creates the following characters:
$ go tool 8c example.c
$ go tool nm example.8
T "" .Bar1
T foo.bar2
T foo ā baz.bar3
Now, please note that I gave Ā·Bar1() capital B This is because in this way I can make it visible to regular Go code - because it translates to the same character that compiles the following Go code:
package example
func Bar1 () {} // nm will show: T "" .Bar1
Now, with respect to the functions that you mentioned in the question, the story goes further along the rabbit hole. I am a little less sure that I am here, but I will try to explain based on what I know. Therefore, each sentence below this paragraph should be read as if it were " AFAIK ", written only at the end.
So, the next missing piece, needed to better understand this riddle, is to learn something else about the strange namespace "" and how the Go suite linker is handled. The namespace "" is what we can call "empty" (because "" for the programmer means "empty string"), or maybe better, the "namespace". And when the linker sees the import as follows:
import examp "path/to/package/example"
then it accepts the library file $GOPATH/pkg/.../example.a , and during the import phase it replaces each "" on the fly with path/to/package/example . So, now in the linked program we will see such a symbol:
T path / to / package / example.Bar1