{"id":1967,"date":"2015-09-16T13:32:09","date_gmt":"2015-09-16T13:32:09","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1967"},"modified":"2015-09-16T13:32:09","modified_gmt":"2015-09-16T13:32:09","slug":"go-at-couchbase-introducing-a-go-sdk","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/","title":{"rendered":"Go at Couchbase &#8211; introducing a Go SDK"},"content":{"rendered":"<p>Both Couchbase and Go have similar goals for scalability and ease of use. The natural alignment results in a great pairing between Couchbase and Go. Application developers need scalable data management systems like Couchbase for the systems they design, so today I\u2019m excited to announce Couchbase is introducing a Go SDK for easy scalability and simple integration with your own Go development projects.<\/p>\n<p>There are several reasons we at Couchbase love Go:<\/p>\n<ol>\n<li>Go makes it easy to build efficient applications ready for high concurrency.<\/li>\n<li>Go makes it easy to work with JSON when building simple, reliable, efficient applications.\u00a0<\/li>\n<li>Go is a well documented, powerful platform intended to keep the syntax and standard library simple allowing the community to build out the rest.\u00a0<\/li>\n<\/ol>\n<p>Let\u2019s look at each of these.<\/p>\n<h2>High Concurrency<\/h2>\n<p>Go is focused on enabling developers with simple constructs that make it easy to assemble highly-concurrent programs. Through this, applications written in Go are able to scale with minimal effort. As hardware and distributed system architectures evolve, programs built in Go have the DNA to efficiently use those resources to scale to even more users. Couchbase has similar goals. We want to enable the database chosen by the application developer to scale with minimal effort. In Go, building for scale is primarily done through primitives known as goroutines, which express logic to execute in parallel, and channels, which safely moves data across the parallel logic.<\/p>\n<p>The Couchbase SDK for Go works well with these constructs. From the outset, we looked to give the Go application developer an API surface area that fits inside an application using goroutines and channels. The SDK is designed to easily work with the concurrency expressed by the application developer while not adding overhead in its own management of the work asked of it. Net result? With minimal effort, the application gets the benefit of all of the performance and scale of the Couchbase Server cluster. \u00a0The Go SDK, abstracts away the details of what needs to happen when scaling the Couchbase Server cluster.\u00a0<\/p>\n<h2>Ease of Development<\/h2>\n<p>Another way our Go SDK seamlessly blends with the philosophy around Go is by being simple to setup and use in an application. Recognizing that a Go application will define the data structures it will work with across goroutines and channels, the Couchbase SDK for Go gives developers a simple way of expressing how to query and store data in a Couchbase Server cluster. Go has excellent support for mapping JSON to data types in Go. The Go SDK leverages this in the actions developers request of it. \u00a0When querying or adding data, the SDK will marshal and unmarshal the JSON responses into the Go structures defined by the application.<\/p>\n<p>The Couchbase SDK for Go supports new features in Couchbase Server that make developing applications easy. Couchbase&#39;s <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/n1ql\/index.html\">new query language N1QL<\/a> extends SQL to work with JSON documents allowing developers to easily query in a familiar way. \u00a0With N1QL\u2019s ability to easily query JSON \u00a0structured data at the fingertips of a Go developer, the acts of finding, manipulating and storing data become easy.<\/p>\n<h2>Simple on the Surface, but Extensible<\/h2>\n<p>The Go community strives for simplicity by keeping the standard library and syntax simple at the surface while not hiding primitives from those who need them. Using the Go community\u2019s desire for simplicity with deep capabilities, we created two layers in the Go SDK.<\/p>\n<p>First, to satisfy the developer looking for straightforward ability to work with JSON mapped to Go language structures, we built a simple interface, known as gocb, that gives a developer easy-to-understand, type-safe operations. This interface also integrates quickly into the synchronous goroutine framework in Go.<\/p>\n<p>There are some situations where a developer needs to integrate Couchbase into a larger framework which is expected to be used by other developers. An example might be a new application framework needing a pure, asynchronous interface or a reactive component in the middle of the architecture moving data between systems. Those developers may need to interact closely at the lowest levels of how the Couchbase SDK interacts with the Couchbase Server cluster. There may also be times that developers want to skip past data marshaling to save that small bit of extra processing or a desire to move to a 100 percent asynchronous interface for IO. The needs of each of these cases is met by the gocbcore layer in the Couchbase SDK for Go.<\/p>\n<h2>What\u2019s Next<\/h2>\n<p>Software is continuously evolving and we will continue to work with the improvements coming out of the Go community. Google has made great strides with Go 1.5\u2019s memory management and development ease. We expect the new developer tooling and redesign of memory management to be things that will help us with future versions of Couchbase Server while those developing their own Go programs can take advantage of the changes immediately with the Couchbase SDK for Go, which supports Go 1.5 today.<\/p>\n<p>And for Couchbase components using Go? That future is being built now. We have a number of new projects <a href=\"https:\/\/github.com\/couchbase\">published as Open Source<\/a> that we expect to arrive in the next few releases of Couchbase Server and Couchbase Mobile. Most of those projects are written in Go as well.<\/p>\n<p>We\u2019re excited to see what developers build with our new Couchbase SDK for Go.<\/p>\n<p><em>You will find code samples and locations for the bits and the docs from <a href=\"go-sdk-1.0-ga\">Brett Lawson&#39;s blog on the GA<\/a>. \u00a0Brett is the lead engineer on the Go SDK.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Both Couchbase and Go have similar goals for scalability and ease of use. The natural alignment results in a great pairing between Couchbase and Go. Application developers need scalable data management systems like Couchbase for the systems they design, so [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[8993],"class_list":["post-1967","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Go at Couchbase - introducing a Go SDK - The Couchbase Blog<\/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:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go at Couchbase - introducing a Go SDK\" \/>\n<meta property=\"og:description\" content=\"Both Couchbase and Go have similar goals for scalability and ease of use. The natural alignment results in a great pairing between Couchbase and Go. Application developers need scalable data management systems like Couchbase for the systems they design, so [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-16T13:32:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ingenthr\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/\"},\"author\":{\"name\":\"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/35e939d9fe3dfb1a06f1714ee54bb098\"},\"headline\":\"Go at Couchbase &#8211; introducing a Go SDK\",\"datePublished\":\"2015-09-16T13:32:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/\"},\"wordCount\":926,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/\",\"name\":\"Go at Couchbase - introducing a Go SDK - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-09-16T13:32:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go at Couchbase &#8211; introducing a Go SDK\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/35e939d9fe3dfb1a06f1714ee54bb098\",\"name\":\"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e8b5b257dfa7206fd7c2a5d628fc580b\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/fd6787feb079d2c67a3835a47901bbb9c03b8921abced82a2a1f6975816df2ad?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/fd6787feb079d2c67a3835a47901bbb9c03b8921abced82a2a1f6975816df2ad?s=96&d=mm&r=g\",\"caption\":\"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase\"},\"description\":\"Matt Ingenthron is the Senior Director in Engineering at Couchbase where he focuses on the developer interface across SDKs, connectors and other projects. He has been a contributor to the memcached project, one of the maintainers of the Java spymemcached client, and a core developer on Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ingenthr\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/matt-ingenthron\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Go at Couchbase - introducing a Go SDK - The Couchbase Blog","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:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/","og_locale":"en_US","og_type":"article","og_title":"Go at Couchbase - introducing a Go SDK","og_description":"Both Couchbase and Go have similar goals for scalability and ease of use. The natural alignment results in a great pairing between Couchbase and Go. Application developers need scalable data management systems like Couchbase for the systems they design, so [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-09-16T13:32:09+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@ingenthr","twitter_misc":{"Written by":"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/"},"author":{"name":"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/35e939d9fe3dfb1a06f1714ee54bb098"},"headline":"Go at Couchbase &#8211; introducing a Go SDK","datePublished":"2015-09-16T13:32:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/"},"wordCount":926,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/","url":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/","name":"Go at Couchbase - introducing a Go SDK - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-09-16T13:32:09+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/go-at-couchbase-introducing-a-go-sdk\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Go at Couchbase &#8211; introducing a Go SDK"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/35e939d9fe3dfb1a06f1714ee54bb098","name":"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e8b5b257dfa7206fd7c2a5d628fc580b","url":"https:\/\/secure.gravatar.com\/avatar\/fd6787feb079d2c67a3835a47901bbb9c03b8921abced82a2a1f6975816df2ad?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fd6787feb079d2c67a3835a47901bbb9c03b8921abced82a2a1f6975816df2ad?s=96&d=mm&r=g","caption":"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase"},"description":"Matt Ingenthron is the Senior Director in Engineering at Couchbase where he focuses on the developer interface across SDKs, connectors and other projects. He has been a contributor to the memcached project, one of the maintainers of the Java spymemcached client, and a core developer on Couchbase.","sameAs":["https:\/\/x.com\/ingenthr"],"url":"https:\/\/www.couchbase.com\/blog\/author\/matt-ingenthron\/"}]}},"authors":[{"term_id":8993,"user_id":41,"is_guest":0,"slug":"matt-ingenthron","display_name":"Matt Ingenthron, Senior Director, SDK Engineering, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/fd6787feb079d2c67a3835a47901bbb9c03b8921abced82a2a1f6975816df2ad?s=96&d=mm&r=g","author_category":"","last_name":"Ingenthron","first_name":"Matt","job_title":"","user_url":"","description":"Matt Ingenthron is the Senior Director in Engineering at Couchbase where he focuses on the developer interface across SDKs, connectors and other projects.  He has been a contributor to the memcached project, one of the maintainers of the Java spymemcached client, and a core developer on Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1967","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=1967"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1967\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=1967"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=1967"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=1967"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}