{"id":5533,"date":"2018-07-25T09:34:55","date_gmt":"2018-07-25T16:34:55","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5533"},"modified":"2025-06-13T21:20:31","modified_gmt":"2025-06-14T04:20:31","slug":"couchbase-go-sdk-1-4-0-released","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/","title":{"rendered":"Couchbase Go SDK 1.4.0 Released!"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">We\u2019ve recently pushed out another minor release of the Couchbase Go SDK: 1.4.0. This is a new minor version and most notably includes support for Response Time Observability and Transparent Compression.<\/span><\/p>\n<h2>What\u2019s in this release?<\/h2>\n<p><span style=\"font-weight: 400;\">We\u2019ve added support for Transparent Compression, Client Certificate Authentication and Multi Network Configurations. We\u2019ve also added Response Time Observability that allows for seeing where time is spent in requests and identifies Orphan Responses as covered in <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/building-an-observation-deck\/\"><span style=\"font-weight: 400;\">previous blogs<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2>Transparent Compression<\/h2>\n<p><span style=\"font-weight: 400;\">The SDK will now automatically compress and decompress documents sent to the server, if enabled on the server. This can lead to a substantial saving in both bandwidth and transmission time. By default this feature is turned on for both compression and decompression and is configured via connection string options:<\/span><\/p>\n<ul>\n<li><span class=\"lang:default decode:true crayon-inline \">compression<\/span>\u00a0 &#8211; boolean, whether to enable or disable client-side compression, defaults to true.<\/li>\n<li><span class=\"lang:default decode:true crayon-inline \">compression_min_size<\/span>\u00a0 &#8211; int, the minimum document size (in bytes) for a document to be considered for compression, defaults to 32 bytes.<\/li>\n<li><span class=\"lang:default decode:true crayon-inline \">compression_min_ratio<\/span>\u00a0 &#8211; float, compressed size \/ original size. The minimum ratio for a compressed document to be sent compressed &#8211; defaults to 0.83.<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">You can read more about Compression in the <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/compression-intro.html\"><span style=\"font-weight: 400;\">documentation<\/span><\/a><span style=\"font-weight: 400;\"> with more of the technical details in the <a href=\"https:\/\/github.com\/couchbaselabs\/sdk-rfcs\/blob\/master\/rfc\/0030-compression.md\">sdk-rfc<\/a><\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2>Client Certificate Authentication<\/h2>\n<p><span style=\"font-weight: 400;\">Client Certificate Authentication is a feature for \u00a0Enterprise Edition subscribers that enables the usage of X.509 certificates for authenticating the client with Couchbase Server. This means that connections to the server are more secure and that the client can be confident that they\u2019re only connecting to trusted servers. To use this feature a valid certificate must be setup on the server and the user identity for the client-side certificate must have roles correct assigned. The <span class=\"lang:default decode:true crayon-inline \">certpath<\/span>\u00a0 and <span class=\"lang:default decode:true crayon-inline \">keypath<\/span>\u00a0 should be provided in the connection string and the new <span class=\"lang:default decode:true crayon-inline \">CertAuthenticator{}<\/span>\u00a0 used for cluster authentication.<\/span><\/p>\n<pre class=\"lang:go decode:true \">cluster, err := gocb.Connect(\"couchbases:\/\/10.0.0.1?certpath=\/path\/to\/chain.pem&amp;keypath=\/path\/to\/client.key\")\r\nif err != nil {\r\n\u00a0\u00a0\u00a0panic(err)\r\n}\r\ncluster.Authenticate(gocb.CertAuthenticator{})\r\nbucket, err := cluster.OpenBucket(\"travel-sample\", \"\")\r\nif err != nil {\r\n\u00a0\u00a0\u00a0panic(err)\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">You can read more about Client Certificate Authentication at <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/go\/sdk-authentication-overview.html\"><span style=\"font-weight: 400;\">https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/go\/sdk-authentication-overview.html<\/span><\/a><\/p>\n<h2>Response Time Observability<\/h2>\n<p><span style=\"font-weight: 400;\">These are two new, separate but also related, features designed to better understand response times and possibly diagnose where slow responses are coming from.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Response Time Observability provides information that can be used to identify unusually long running operations, helping to work out where issues are occuring &#8211; Couchbase Server, a particular node, network etc\u2026 By default a ThresholdLogTracer implementation is used but this can be swapped out for your own implementation that adheres to the OpenTracing evolving standard. To prevent filling the logs the logging defaults to a 10&#215;10 basis. That is, the slowest 10 time outs for the last 10 seconds.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The logged output looks like:<\/span><\/p>\n<pre class=\"wrap:true lang:default decode:true \">{\"service\":\"kv\",\"count\":10,\"top\":[{\"operation_name\":\"Get\",\"total_us\":7451,\"server_us\":18,\"decode_us\":20,\"last_operation_id\":\"0xd0a\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":5302,\"server_us\":22,\"decode_us\":17,\"last_operation_id\":\"0x1059\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":5302,\"server_us\":43,\"decode_us\":18,\"last_operation_id\":\"0xd63\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":4074,\"server_us\":117,\"decode_us\":17,\"last_operation_id\":\"0xab3\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":4029,\"server_us\":14,\"decode_us\":11,\"last_operation_id\":\"0xdfa\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":3253,\"server_us\":27,\"decode_us\":14,\"last_operation_id\":\"0x489\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":3235,\"server_us\":11,\"decode_us\":13,\"last_operation_id\":\"0x33b\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":3136,\"server_us\":14,\"decode_us\":13,\"last_operation_id\":\"0xf1b\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":3132,\"server_us\":5,\"decode_us\":14,\"last_operation_id\":\"0xea0\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"},{\"operation_name\":\"Get\",\"total_us\":3045,\"server_us\":14,\"decode_us\":45,\"last_operation_id\":\"0x5\",\"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"}]}<\/pre>\n<p><span style=\"font-weight: 400;\">What we see is the type of service that the log is for and how many samples we\u2019ve taken. Let\u2019s look at a sample in more detail:<\/span><\/p>\n<pre class=\"lang:default decode:true \">{\r\n  \"operation_name\":\"Get\",\r\n  \"total_us\":7451,\r\n  \"server_us\":18,\r\n  \"decode_us\":20,\r\n  \"last_operation_id\":\"0xd0a\",\r\n  \"last_local_id\":\"1d92576caf69677e\/d4dbeb0069de1162\"\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">What we can see here is that the operation was a Get that took a total of 7.4 milliseconds of which 18 microseconds were spent on the server and 20 microseconds spent decoding the response. The last_operation_id and the last_local_id can be used to uniquely identify the request and match it up to the server logs and\/or Orphan Response Logging.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can read more about the ThresholdLogTracer and tracing at <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/go\/threshold-logging.html\"><span style=\"font-weight: 400;\">https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/go\/threshold-logging.html<\/span><\/a><span style=\"font-weight: 400;\"> and <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/go\/tracing-from-the-sdk.html\"><span style=\"font-weight: 400;\">https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/go\/tracing-from-the-sdk.html<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">An Orphaned Response is a response received from the server for a request which has already timed out on the client. When this occurs the client still handles this response and Orphan Response Logging logs the slowest of these, along with their server durations. This is performed, by default, on the same 10&#215;10 basis as above but is only supported for KV operations.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The logged output looks like:<\/span><\/p>\n<pre class=\"wrap:true lang:default decode:true \">{\"service\":\"kv\",\"count\":10,\"top\":[{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x15f\",\"r\":\"10.111.180.101:11210\",\"d\":10036,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x92\",\"r\":\"10.111.180.101:11210\",\"d\":6239,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x85\",\"r\":\"10.111.180.101:11210\",\"d\":376,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x82\",\"r\":\"10.111.180.101:11210\",\"d\":135,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x67\",\"r\":\"10.111.180.101:11210\",\"d\":135,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x160\",\"r\":\"10.111.180.101:11210\",\"d\":126,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x44\",\"r\":\"10.111.180.101:11210\",\"d\":126,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x40\",\"r\":\"10.111.180.101:11210\",\"d\":126,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x5c\",\"r\":\"10.111.180.101:11210\",\"d\":108,\"s\":\"kv:CMD_GET\"},{\"c\":\"79bec7c299101f94\/5f243f078b177992\",\"i\":\"0x66\",\"r\":\"10.111.180.101:11210\",\"d\":91,\"s\":\"kv:CMD_GET\"}]}<\/pre>\n<p><span style=\"font-weight: 400;\">As above we can see the service that the log is for and our sample size. A sample in more detail:<\/span><\/p>\n<pre class=\"lang:default decode:true \">{\r\n  \"c\":\"79bec7c299101f94\/5f243f078b177992\",\r\n  \"I\":\"0x15f\",\r\n  \"r\":\"10.111.180.101:11210\",\r\n  \"d\":10036,\r\n  \"s\":\"kv:CMD_GET\"\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">We can see the remote server address (r), the type of operation(s), the server duration (d) expressed in microseconds and the unique identifiers for the request (c and i). We can see that the longest timeout has a server duration of 10 milliseconds so our problem probably isn\u2019t on the server side. Note that server duration is the time the request spent on the server side and not the total request duration.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Configuration of Orphan Response Logging is done via the cluster.Connect connection string. There are 3 configuration fields:<\/span><\/p>\n<ul>\n<li><span class=\"lang:default decode:true crayon-inline \">orphaned_response_logging<\/span>\u00a0 &#8211; boolean value defining whether or not to enable Orphan Response Logging, defaults to true.<\/li>\n<li><span class=\"lang:default decode:true crayon-inline \">orphaned_response_logging_interval<\/span>\u00a0 &#8211; an int value expressed in milliseconds, defines how long each logging window should be, defaults to 10 seconds.<\/li>\n<li><span class=\"lang:default decode:true crayon-inline \">orphaned_response_logging_sample_size<\/span>\u00a0 &#8211; an int value, defines how many requests to log per logging window, defaults to 10 (will always be the slowest x requests for the window).<\/li>\n<li><span class=\"lang:default decode:true crayon-inline \">server_durations<\/span>\u00a0 &#8211; boolean value defining whether or not to enable server side request durations, defaults to true and available as of Couchbase Server 5.5.<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Note that in order for these 2 features to work you must be using <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/sdk\/go\/collecting-information-and-logging.html\"><span style=\"font-weight: 400;\">gocb logging<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2>Multi Network Configuration Support<\/h2>\n<p><span style=\"font-weight: 400;\">Multi Network Configuration allows the SDK to connect to clusters that expose a different set of hostnames and ports to what they use within their network internally (e.g. for when the cluster is within a different container to the application using the SDK). <\/span><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.1\/sdk\/go\/compatibility-versions-features.html#net-feature-matrix__d551e17\"><span style=\"font-weight: 400;\">Support is currently considered volatile and subject to change at any time<\/span><\/a><span style=\"font-weight: 400;\">. Use of this feature is handled through a new property called <span class=\"lang:default decode:true crayon-inline \">network<\/span>\u00a0, passed in the connection string used in cluster.Connect. As of now there are 3 options that can be used with this property: auto (this is also the value used when the option is missing from the connection string or empty), default, and external.<\/span><\/p>\n<ul>\n<li><span class=\"lang:default decode:true crayon-inline \">default<\/span>\u00a0 &#8211; will cause the SDK to use the default hostname\/ports provided for each node.<\/li>\n<li><span class=\"lang:default decode:true crayon-inline \">external<\/span>\u00a0 &#8211; will cause the SDK to use the external hostname\/ports provided for each node.<\/li>\n<li><span class=\"lang:default decode:true crayon-inline \">auto<\/span>\u00a0or property missing &#8211; will cause the SDK to attempt to work out the correct configuration to use for node.<\/li>\n<\/ul>\n<h2><span style=\"font-weight: 400;\">Bug Fixes<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">The list of updates and fixes included in this release can be found in the <\/span><a href=\"https:\/\/docs.couchbase.com\/go-sdk\/current\/project-docs\/sdk-release-notes.html\"><span style=\"font-weight: 400;\">release notes<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Getting it<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Get the latest version using <span class=\"lang:default decode:true crayon-inline \">go get gopkg.in\/couchbase\/gocb.v1<\/span>\u00a0.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Clone the repo <a href=\"https:\/\/github.com\/couchbase\/gocb\">here<\/a>.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We\u2019ve recently pushed out another minor release of the Couchbase Go SDK: 1.4.0. This is a new minor version and most notably includes support for Response Time Observability and Transparent Compression. What\u2019s in this release? We\u2019ve added support for Transparent [&hellip;]<\/p>\n","protected":false},"author":17480,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1820,2201],"tags":[2202],"ppma_author":[8944],"class_list":["post-5533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-golang","category-tools-sdks","tag-opentracing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase Go SDK 1.4.0 Released! - 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\/couchbase-go-sdk-1-4-0-released\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase Go SDK 1.4.0 Released!\" \/>\n<meta property=\"og:description\" content=\"We\u2019ve recently pushed out another minor release of the Couchbase Go SDK: 1.4.0. This is a new minor version and most notably includes support for Response Time Observability and Transparent Compression. What\u2019s in this release? We\u2019ve added support for Transparent [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-25T16:34:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:20:31+00:00\" \/>\n<meta name=\"author\" content=\"Charles Dixon, Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Charles Dixon, Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/\"},\"author\":{\"name\":\"Charles Dixon, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/cd440eed5f00a0f702828c9f3697f6c3\"},\"headline\":\"Couchbase Go SDK 1.4.0 Released!\",\"datePublished\":\"2018-07-25T16:34:55+00:00\",\"dateModified\":\"2025-06-14T04:20:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/\"},\"wordCount\":1048,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"opentracing\"],\"articleSection\":[\"GoLang\",\"Tools &amp; SDKs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/\",\"name\":\"Couchbase Go SDK 1.4.0 Released! - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-07-25T16:34:55+00:00\",\"dateModified\":\"2025-06-14T04:20:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#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\/couchbase-go-sdk-1-4-0-released\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase Go SDK 1.4.0 Released!\"}]},{\"@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\/cd440eed5f00a0f702828c9f3697f6c3\",\"name\":\"Charles Dixon, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9cb6d8cbb9125a775db01b9a74258c36\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6359fe0ffc778647ed89c818c1474ac1151dae1fe4bf7315ad38a0ec92cfe9af?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6359fe0ffc778647ed89c818c1474ac1151dae1fe4bf7315ad38a0ec92cfe9af?s=96&d=mm&r=g\",\"caption\":\"Charles Dixon, Senior Software Engineer, Couchbase\"},\"description\":\"Charles Dixon is a Senior Software Engineer at Couchbase. He primarily works on the Couchbase Go SDK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/charles-dixon\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase Go SDK 1.4.0 Released! - 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\/couchbase-go-sdk-1-4-0-released\/","og_locale":"en_US","og_type":"article","og_title":"Couchbase Go SDK 1.4.0 Released!","og_description":"We\u2019ve recently pushed out another minor release of the Couchbase Go SDK: 1.4.0. This is a new minor version and most notably includes support for Response Time Observability and Transparent Compression. What\u2019s in this release? We\u2019ve added support for Transparent [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-07-25T16:34:55+00:00","article_modified_time":"2025-06-14T04:20:31+00:00","author":"Charles Dixon, Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Charles Dixon, Software Engineer, Couchbase","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/"},"author":{"name":"Charles Dixon, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/cd440eed5f00a0f702828c9f3697f6c3"},"headline":"Couchbase Go SDK 1.4.0 Released!","datePublished":"2018-07-25T16:34:55+00:00","dateModified":"2025-06-14T04:20:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/"},"wordCount":1048,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["opentracing"],"articleSection":["GoLang","Tools &amp; SDKs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/","name":"Couchbase Go SDK 1.4.0 Released! - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-07-25T16:34:55+00:00","dateModified":"2025-06-14T04:20:31+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-go-sdk-1-4-0-released\/#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\/couchbase-go-sdk-1-4-0-released\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase Go SDK 1.4.0 Released!"}]},{"@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\/cd440eed5f00a0f702828c9f3697f6c3","name":"Charles Dixon, Senior Software Engineer, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9cb6d8cbb9125a775db01b9a74258c36","url":"https:\/\/secure.gravatar.com\/avatar\/6359fe0ffc778647ed89c818c1474ac1151dae1fe4bf7315ad38a0ec92cfe9af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6359fe0ffc778647ed89c818c1474ac1151dae1fe4bf7315ad38a0ec92cfe9af?s=96&d=mm&r=g","caption":"Charles Dixon, Senior Software Engineer, Couchbase"},"description":"Charles Dixon is a Senior Software Engineer at Couchbase. He primarily works on the Couchbase Go SDK.","url":"https:\/\/www.couchbase.com\/blog\/author\/charles-dixon\/"}]}},"authors":[{"term_id":8944,"user_id":17480,"is_guest":0,"slug":"charles-dixon","display_name":"Charles Dixon, Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/6359fe0ffc778647ed89c818c1474ac1151dae1fe4bf7315ad38a0ec92cfe9af?s=96&d=mm&r=g","author_category":"","last_name":"Dixon, Software Engineer, Couchbase","first_name":"Charles","job_title":"","user_url":"","description":"Charles Dixon is Software Engineer at Couchbase. He works on the Couchbase Go SDK."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/5533","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\/17480"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=5533"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/5533\/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=5533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=5533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=5533"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=5533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}