add initial go implementation