As a follow up to this question, I am trying to write a Go program that only lists a files name in an efficient matter without unnecessary system calls. This is what I have thus far:
package main
import (
"os"
"fmt"
"log"
)
func main() {
// Open directory and check for errors
f, err := os.Open(".")
if err != nil {
log.Fatal(err)
}
// Get file names
files, err := f.Readdirnames(0)
if err != nil {
log.Fatal(err)
}
// Print files
fmt.Print(files, "
")
}
However, when I run an strace
, I see many of the following:
clock_gettime(CLOCK_REALTIME, {1406822401, 824793686}) = 0
What does that pertain to? How can I make this code more efficient?
I am spitballing, but I would think that it is related to Go's built-in scheduler and garbage collection.
Short answer is, go will never be quite as fast as C because it provides all of that extra runtime functionality which C doesn't.
The code you listed is probably the fastest way to do what you want in Go.
clock_gettime is just a system call,which is called in go's runtime. runtime do a lot of things, schedual, and so on, so it's normal for so many clock_gettime.
I don't think you can make this program more efficient, 'cause it is just for so tiny function .You shouldn't mind it.