If you use it as an in-memory DB, then I'd recommend using the LSM options, instead of Default options.
It seems that most of the design effort of this project was focused on fast disk access.
Files are essentially mmap'd.
Regarding the hash table suggestion, you would lose compression/compaction and indexing/prefix scans.
Yes, but using LSM tree has a performance penalty over plain hash tables.
Yes, you would lose compression. But you could still have prefix scans by replacing the hash table by e.g. a red/black tree.
Goroutines do an equivalent job but write is synchronous and thus blocks one thread of the go scheduler, as far as I can tell.
Also the benefit of the async io API is that it allows sending multiple requests in ones call. Syscalls in go do have an overhead which can be mitigated this way, I guess.