add go lang implementation