{"id":46188,"date":"2014-07-29T00:00:00","date_gmt":"2014-07-28T15:00:00","guid":{"rendered":"https:\/\/gengo.com\/uncategorized\/go-gengo\/"},"modified":"2019-10-24T14:36:14","modified_gmt":"2019-10-24T05:36:14","slug":"go-gengo","status":"publish","type":"post","link":"https:\/\/gengo.com\/articles\/go-gengo\/","title":{"rendered":"Go at Gengo!"},"content":{"rendered":"At Gengo, the engineering team is constantly working to create a better experience for our customers and translators. One of the ways we&#8217;re doing this is\u00a0by using more of our favorite new\u00a0technologies such as\u00a0<a href=\"http:\/\/golang.org\/\">Go, an open source programming language.<\/a> We recently built several services in Go that have improved our speed, reliability and ease of use, including two projects we call GoShip and the Email Consumer.\r\n<h3>GoShip<\/h3>\r\n<a href=\"https:\/\/github.com\/gengo\/goship\">GoShip<\/a>, the first service that we wrote in Go, is an open source web application that makes it easy to deploy code to servers.\r\n\r\nIt takes\u00a0a\u00a0YAML configuration file containing hostnames, environments (pre-production, production, etc.) and the location of the git repository on remote servers. For each project, GoShip SSHes into its hosts and checks whether the latest git revision differs from the most recent revision on GitHub. If the revisions differ, a deploy button is shown on the page, which runs the deployment command specified for that project. The output is displayed and then stored along with the time and status of the deployment.\r\n\r\nFor added fun, our Art Director, <a href=\"http:\/\/blog.gengo.com\/author\/tina-staeheli\/\">Tina<\/a>, even drew an informal mascot for GoShip featuring the <a href=\"http:\/\/blog.golang.org\/gopher\">Go gopher<\/a> at the helm of his own pirate ship (pictured above).\r\n<h3>The Email Consumer<\/h3>\r\nWe also created a service to send emails that uses <a href=\"http:\/\/www.iron.io\/\">Iron.io<\/a>&#8216;s queue service, IronMQ. We call this the Email Consumer, which pulls\u00a0JSON payloads off of a queue before rendering and sending the email that matches the ID in the payload.\r\n<p style=\"padding-left: 30px;\"><code>{<\/code>\r\n<code>\u00a0 \u00a0 \"data\": {<\/code>\r\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \"display_name\": \"Shawn Smith\"<\/code>\r\n<code>\u00a0 \u00a0 },<\/code>\r\n<code>\u00a0 \u00a0 \"email_to\": [<\/code>\r\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \"shawn@example.com\"<\/code>\r\n<code>\u00a0 \u00a0 ],<\/code>\r\n<code>\u00a0 \u00a0 \"from_email\": \"consumer@gengo.com\",<\/code>\r\n<code>\u00a0 \u00a0 \"from_name\": \"Consumer Test\",<\/code>\r\n<code>\u00a0 \u00a0 \"id\": \"welcome-c\",<\/code>\r\n<code>\u00a0 \u00a0 \"lc\": \"ja\"<\/code>\r\n<code>}<\/code><\/p>\r\nIn the above example, a new customer signed up on our website, so our web application puts a JSON payload with the id &#8220;welcome-c&#8221; onto the queue. The Email Consumer consumes the payload and looks up the email subject for the email with the given ID, also rendering the template with the given data. In this case, the data is simply the user&#8217;s name. It also localizes the strings in the template based on the language code provided (in this case, it&#8217;s Japanese) and sends the email via <a href=\"http:\/\/sendgrid.com\/\">SendGrid<\/a>, welcoming the customer to Gengo.\r\n\r\nMoving all of our emails into one\u00a0place helps us easily make consistent style and copy edits. We send over 50 different emails to customers and translators through the Email Consumer, and to date it has sent over 500,000 emails without a problem.\r\n<h3>On the backend<\/h3>\r\nWe&#8217;re moving\u00a0several backend services from PHP and Python to Go as well. This includes loading and validating jobs in our translator workbench, as well as a port of our glossary service that reduced the total lines of code from 33,000 lines of Python and PHP to 1,700 lines of Go, improving the speed by a factor of 10. We don\u2019t attribute the line count reduction entirely to Go\u2014we removed a lot of legacy code, too\u2014but Go made refactoring the service\u00a0much simpler.\r\n\r\nOur overall experience with Go in production has been very positive, and in the future we plan to move even more of our services to Go. If you\u2019re interested in trying it out, take a look at <a href=\"http:\/\/golang.org\/doc\/install\">how to get started<\/a>\u00a0and <a href=\"http:\/\/golang.org\/doc\/code.html\">how to write Go code<\/a>.\r\n\r\n<strong>Go global with Gengo&#8217;s people-powered translation platform.<\/strong>\r\n\r\n<a href=\"http:\/\/blog.gengo.com\/globalization-white-papers\/\"><button>Learn More<\/button><\/a>\u00a0\u00a0 or <a href=\"https:\/\/gengo.com\/contact-sales\/\">Contact us<\/a>","protected":false},"excerpt":{"rendered":"At Gengo, the engineering team is constantly working to create a better experience for our customers and translators. One of the ways we&#8217;re doing this is\u00a0by using more of our favorite new\u00a0technologies such as\u00a0Go, an open source programming language. We recently built several services in Go that have improved our speed, reliability and ease of [&hellip;]","protected":false},"author":2,"featured_media":64202,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[366],"tags":[],"class_list":["post-46188","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Go at Gengo! - Gengo<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gengo.com\/articles\/go-gengo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go at Gengo! - Gengo\" \/>\n<meta property=\"og:description\" content=\"At Gengo, the engineering team is constantly working to create a better experience for our customers and translators. One of the ways we&#8217;re doing this is\u00a0by using more of our favorite new\u00a0technologies such as\u00a0Go, an open source programming language. We recently built several services in Go that have improved our speed, reliability and ease of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gengo.com\/articles\/go-gengo\/\" \/>\n<meta property=\"og:site_name\" content=\"Gengo\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/mygengo\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-28T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-24T05:36:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"610\" \/>\n\t<meta property=\"og:image:height\" content=\"333\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Gengo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@gengoit\" \/>\n<meta name=\"twitter:site\" content=\"@gengoit\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gengo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/\"},\"author\":{\"name\":\"Gengo\",\"@id\":\"https:\/\/gengo.com\/#\/schema\/person\/d96784908df475d494d8773178c6aa3b\"},\"headline\":\"Go at Gengo!\",\"datePublished\":\"2014-07-28T15:00:00+00:00\",\"dateModified\":\"2019-10-24T05:36:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/\"},\"wordCount\":539,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/gengo.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg\",\"articleSection\":[\"News\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/gengo.com\/articles\/go-gengo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/\",\"url\":\"https:\/\/gengo.com\/articles\/go-gengo\/\",\"name\":\"Go at Gengo! - Gengo\",\"isPartOf\":{\"@id\":\"https:\/\/gengo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg\",\"datePublished\":\"2014-07-28T15:00:00+00:00\",\"dateModified\":\"2019-10-24T05:36:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/gengo.com\/articles\/go-gengo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage\",\"url\":\"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg\",\"contentUrl\":\"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg\",\"width\":610,\"height\":333},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/gengo.com\/articles\/go-gengo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/gengo.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go at Gengo!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/gengo.com\/#website\",\"url\":\"https:\/\/gengo.com\/\",\"name\":\"Gengo\",\"description\":\"Translation Service\",\"publisher\":{\"@id\":\"https:\/\/gengo.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/gengo.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/gengo.com\/#organization\",\"name\":\"Gengo\",\"url\":\"https:\/\/gengo.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gengo.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/gengo.com\/wp-content\/uploads\/2019\/06\/gengo_favicon.png\",\"contentUrl\":\"https:\/\/gengo.com\/wp-content\/uploads\/2019\/06\/gengo_favicon.png\",\"width\":260,\"height\":260,\"caption\":\"Gengo\"},\"image\":{\"@id\":\"https:\/\/gengo.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/mygengo\",\"https:\/\/x.com\/gengoit\",\"https:\/\/www.instagram.com\/gengoit\/\",\"https:\/\/www.linkedin.com\/company\/gengo\/\",\"https:\/\/www.youtube.com\/user\/gengo\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/gengo.com\/#\/schema\/person\/d96784908df475d494d8773178c6aa3b\",\"name\":\"Gengo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gengo.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/541190c15e678636d95d0109cf71870a60e0f326ddde63e3be01c0e45fa9c367?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/541190c15e678636d95d0109cf71870a60e0f326ddde63e3be01c0e45fa9c367?s=96&d=mm&r=g\",\"caption\":\"Gengo\"},\"description\":\"People-powered translation at scale. Gengo provides fast, affordable and quality translations by native speakers located worldwide.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Go at Gengo! - Gengo","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gengo.com\/articles\/go-gengo\/","og_locale":"en_US","og_type":"article","og_title":"Go at Gengo! - Gengo","og_description":"At Gengo, the engineering team is constantly working to create a better experience for our customers and translators. One of the ways we&#8217;re doing this is\u00a0by using more of our favorite new\u00a0technologies such as\u00a0Go, an open source programming language. We recently built several services in Go that have improved our speed, reliability and ease of [&hellip;]","og_url":"https:\/\/gengo.com\/articles\/go-gengo\/","og_site_name":"Gengo","article_publisher":"https:\/\/www.facebook.com\/mygengo","article_published_time":"2014-07-28T15:00:00+00:00","article_modified_time":"2019-10-24T05:36:14+00:00","og_image":[{"width":610,"height":333,"url":"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg","type":"image\/jpeg"}],"author":"Gengo","twitter_card":"summary_large_image","twitter_creator":"@gengoit","twitter_site":"@gengoit","twitter_misc":{"Written by":"Gengo","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gengo.com\/articles\/go-gengo\/#article","isPartOf":{"@id":"https:\/\/gengo.com\/articles\/go-gengo\/"},"author":{"name":"Gengo","@id":"https:\/\/gengo.com\/#\/schema\/person\/d96784908df475d494d8773178c6aa3b"},"headline":"Go at Gengo!","datePublished":"2014-07-28T15:00:00+00:00","dateModified":"2019-10-24T05:36:14+00:00","mainEntityOfPage":{"@id":"https:\/\/gengo.com\/articles\/go-gengo\/"},"wordCount":539,"commentCount":0,"publisher":{"@id":"https:\/\/gengo.com\/#organization"},"image":{"@id":"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage"},"thumbnailUrl":"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg","articleSection":["News"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gengo.com\/articles\/go-gengo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gengo.com\/articles\/go-gengo\/","url":"https:\/\/gengo.com\/articles\/go-gengo\/","name":"Go at Gengo! - Gengo","isPartOf":{"@id":"https:\/\/gengo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage"},"image":{"@id":"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage"},"thumbnailUrl":"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg","datePublished":"2014-07-28T15:00:00+00:00","dateModified":"2019-10-24T05:36:14+00:00","breadcrumb":{"@id":"https:\/\/gengo.com\/articles\/go-gengo\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gengo.com\/articles\/go-gengo\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gengo.com\/articles\/go-gengo\/#primaryimage","url":"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg","contentUrl":"https:\/\/gengo.com\/wp-content\/uploads\/2014\/07\/goship_gopher.jpg","width":610,"height":333},{"@type":"BreadcrumbList","@id":"https:\/\/gengo.com\/articles\/go-gengo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gengo.com\/"},{"@type":"ListItem","position":2,"name":"Go at Gengo!"}]},{"@type":"WebSite","@id":"https:\/\/gengo.com\/#website","url":"https:\/\/gengo.com\/","name":"Gengo","description":"Translation Service","publisher":{"@id":"https:\/\/gengo.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gengo.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/gengo.com\/#organization","name":"Gengo","url":"https:\/\/gengo.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gengo.com\/#\/schema\/logo\/image\/","url":"https:\/\/gengo.com\/wp-content\/uploads\/2019\/06\/gengo_favicon.png","contentUrl":"https:\/\/gengo.com\/wp-content\/uploads\/2019\/06\/gengo_favicon.png","width":260,"height":260,"caption":"Gengo"},"image":{"@id":"https:\/\/gengo.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/mygengo","https:\/\/x.com\/gengoit","https:\/\/www.instagram.com\/gengoit\/","https:\/\/www.linkedin.com\/company\/gengo\/","https:\/\/www.youtube.com\/user\/gengo"]},{"@type":"Person","@id":"https:\/\/gengo.com\/#\/schema\/person\/d96784908df475d494d8773178c6aa3b","name":"Gengo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gengo.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/541190c15e678636d95d0109cf71870a60e0f326ddde63e3be01c0e45fa9c367?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/541190c15e678636d95d0109cf71870a60e0f326ddde63e3be01c0e45fa9c367?s=96&d=mm&r=g","caption":"Gengo"},"description":"People-powered translation at scale. Gengo provides fast, affordable and quality translations by native speakers located worldwide."}]}},"_links":{"self":[{"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/posts\/46188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/comments?post=46188"}],"version-history":[{"count":0,"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/posts\/46188\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/media\/64202"}],"wp:attachment":[{"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/media?parent=46188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/categories?post=46188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gengo.com\/wp-json\/wp\/v2\/tags?post=46188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}