{"id":97078,"date":"2020-12-15T08:57:45","date_gmt":"2020-12-15T16:57:45","guid":{"rendered":"https:\/\/www.backblaze.com\/blog\/?p=97078"},"modified":"2024-08-23T17:15:08","modified_gmt":"2024-08-24T00:15:08","slug":"development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage","status":"publish","type":"post","link":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/","title":{"rendered":"Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-97079\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg\" alt=\"\" width=\"1440\" height=\"820\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg 1440w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB-300x171.jpg 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB-1024x583.jpg 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB-768x437.jpg 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB-560x319.jpg 560w\" sizes=\"auto, (max-width: 1440px) 100vw, 1440px\" \/><\/p>\n<p id=\"bzdropcap\">If you build apps, you\u2019ve probably considered working in Go. After all, the open-source language has become more popular with developers every year since its introduction. With a reputation for simplicity in meeting modern programming needs, it\u2019s no surprise that <a href=\"https:\/\/octoverse.github.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a> lists it as the 10th most popular coding language out there. Docker, <a href=\"https:\/\/www.backblaze.com\/cloud-storage\/solutions\/kubernetes-backup\">Kubernetes<\/a>, <a href=\"https:\/\/www.backblaze.com\/cloud-storage\/integrations\/rclone\">rclone<\/a>\u2014all developed in Go.<\/p>\n<p>If you\u2019re not using Go, this post will suggest a few reasons you might give it a shot in your next application, with a specific focus on another reason for its popularity: its ease of use in connecting to <a href=\"https:\/\/www.backblaze.com\/b2\/solutions\/datatransfer\/cloud-to-cloud.html\">cloud storage<\/a>\u2014an increasingly important requirement as data storage and delivery becomes central to wide swaths of app development. With this in mind, the following content will also outline some basic and relatively straightforward steps to follow for building an app in Go and connecting it to cloud storage.<\/p>\n<p>But first, if you\u2019re not at all familiar with this programming language, here\u2019s a little more background to get you started.<\/p>\n<h2>What Is Go?<\/h2>\n<p><a href=\"https:\/\/golang.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Go<\/a> (sometimes referred to as Golang) is a modern coding language that can perform as well as low-level languages like C, yet is simpler to program and takes full advantage of modern processors. Similar to Python, it can meet many common programming needs and is extensible with a growing number of libraries. However, these advantages don\u2019t mean it\u2019s necessarily slower\u2014in fact, applications written in Go compile to a binary that runs nearly as fast as programs written in C. It\u2019s also designed to take advantage of multiple cores and concurrency routines, compiles to machine code, and is generally <a href=\"https:\/\/benchmarksgame-team.pages.debian.net\/benchmarksgame\/fastest\/go.html\" target=\"_blank\" rel=\"noopener noreferrer\">regarded as being faster than Java<\/a>.<\/p>\n<h2>Why Use Go With Cloud Storage?<\/h2>\n<p>No matter how fast or efficient your app is, how it interacts with storage is crucial. Every app needs to store content on some level. And even if you keep some of the data your app needs closer to your CPU operations, or on other storage temporarily, it still benefits you to use economical, active storage.<\/p>\n<p>Here are a few of the primary reasons why:<\/p>\n<ul>\n<li><strong>Massive amounts of user data.<\/strong> If your application allows users to upload data or documents, your eventual success will mean that storage requirements for the app will grow exponentially.<\/li>\n<li><strong>Application data.<\/strong> If your app generates data as a part of its operation, such as log files, or needs to store both large data sets and the results of <a href=\"https:\/\/www.backblaze.com\/b2\/solutions\/compute.html\">compute<\/a> runs on that data, connecting directly to cloud storage helps you to manage that flow over the long run.<\/li>\n<li><strong>Large data sets.<\/strong> Any app that needs to make sense of giant pools of unstructured data, like an app utilizing machine learning, will operate faster if the storage for those data sets is close to the application and readily available for retrieval.<\/li>\n<\/ul>\n<p>Generally speaking, active cloud storage is a key part of delivering ideal <a href=\"\/blog\/capex-vs-opex\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpEx<\/a> as your app scales. You\u2019re able to ensure that as you grow, and your user or app data grows along with you, your need to invest in storage capacity won\u2019t hamper your scale. You pay for exactly what you use as you use it.<\/p>\n<p>Whether you buy the argument here, or you\u2019re just curious, it\u2019s easy and free to test out adding this power and performance to your next project. Follow along below for a simple approach to get you started, then tell us what you think.<\/p>\n<h2>How to Connect an App Written in Go With Cloud Storage<\/h2>\n<p>Once you have your <a href=\"https:\/\/golang.org\/doc\/install\" target=\"_blank\" rel=\"noopener noreferrer\">Go environment set up<\/a>, you\u2019re ready to start building code in your main Gopath\u2019s directory ($GOPATH). This example builds a Go app that connects to Backblaze <a href=\"https:\/\/www.backblaze.com\/cloud-storage\/solutions\/media-workflow\">B2 Cloud Storage<\/a> using the AWS S3 SDK.<\/p>\n<p>Next, create a bucket to store content in. You can create buckets programmatically in your app later, but for now, create <a href=\"https:\/\/www.backblaze.com\/b2\/docs\/quick_bucket.html\">a bucket<\/a> in the Backblaze B2 web interface, and make note of the associated server endpoint.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97083\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image2-1-1024x470.png\" alt=\"\" width=\"1024\" height=\"470\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image2-1-1024x470.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image2-1-300x138.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image2-1-768x352.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image2-1-560x257.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image2-1.png 1364w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Now, generate an <a href=\"https:\/\/www.backblaze.com\/b2\/docs\/application_keys.html\">application key<\/a> for the tool, scope bucket access to the the new bucket only, and <strong>make sure that \u201cAllow listing all bucket names\u201d is selected:<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97084\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image1-2-892x1024.png\" alt=\"\" width=\"600\" height=\"689\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image1-2-892x1024.png 892w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image1-2-261x300.png 261w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image1-2-768x882.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image1-2-560x643.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image1-2.png 1202w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97085\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image9-1-1024x370.png\" alt=\"\" width=\"1024\" height=\"370\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image9-1-1024x370.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image9-1-300x108.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image9-1-768x277.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image9-1-1248x452.png 1248w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image9-1-560x202.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image9-1.png 1252w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Make note of the bucket server connection and <a href=\"https:\/\/www.backblaze.com\/b2\/docs\/application_keys.html\">app key details<\/a>. Use a Go module\u2014for instance, this popular one, called <a href=\"https:\/\/github.com\/joho\/godotenv\" target=\"_blank\" rel=\"noopener noreferrer\">godotenv<\/a>\u2014to make the configuration available to the app that will look in the app root for a .env (hidden) file.<\/p>\n<p>Create the .env file in the app root with your credentials:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97086\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image5-1-1024x279.png\" alt=\"\" width=\"1024\" height=\"279\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image5-1-1024x279.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image5-1-300x82.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image5-1-768x210.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image5-1-560x153.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image5-1.png 1048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>With configuration complete, build a package that connects to Backblaze B2 using the S3 API and S3 Go packages.<\/p>\n<p>First, import the needed modules:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97087\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image3-2-1024x389.png\" alt=\"\" width=\"1024\" height=\"389\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image3-2-1024x389.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image3-2-300x114.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image3-2-768x292.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image3-2-560x213.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image3-2.png 1058w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Then create a new client and session that uses those credentials:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97088\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image7-1-1024x644.png\" alt=\"\" width=\"1024\" height=\"644\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image7-1-1024x644.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image7-1-300x189.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image7-1-768x483.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image7-1-560x352.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image7-1.png 1266w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>And then write functions to upload, download, and delete files:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97089\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image4-1-1024x584.png\" alt=\"\" width=\"1024\" height=\"584\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image4-1-1024x584.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image4-1-300x171.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image4-1-768x438.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image4-1-560x319.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image4-1.png 1262w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Now, put it all to work to make sure everything performs.<\/p>\n<p>In the main test app, first import the modules, including godotenv and the functions you wrote:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-97090\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image11-1.png\" alt=\"\" width=\"998\" height=\"360\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image11-1.png 998w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image11-1-300x108.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image11-1-768x277.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image11-1-560x202.png 560w\" sizes=\"auto, (max-width: 998px) 100vw, 998px\" \/><\/p>\n<p>Read in and reference your configuration:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97091\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image6-1-1024x299.png\" alt=\"\" width=\"1024\" height=\"299\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image6-1-1024x299.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image6-1-300x88.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image6-1-768x224.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image6-1-560x164.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image6-1.png 1130w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>And now, time to exercise those functions and see files upload and download.<\/p>\n<p>For example, this extraordinarily compact chunk of code is all you need to list, upload, download, and delete objects to and from local folders:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97092\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image12-1-1024x958.png\" alt=\"\" width=\"1024\" height=\"958\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image12-1-1024x958.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image12-1-300x281.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image12-1-768x719.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image12-1-560x524.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image12-1.png 1274w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>If you haven\u2019t already, run <code>go mod init<\/code> to initialize the module dependencies, and run the app itself with <code>go run backblaze_example_app.go<\/code>.<\/p>\n<p>Here, a listResult has been thrown in after each step with comments so that you can follow the progress as the app lists the number of objects in the bucket (in this case, zero), upload your specified file from the dir_upload folder, then download it back down again to dir_download:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97098\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.21-PM-1024x392.png\" alt=\"\" width=\"1024\" height=\"392\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.21-PM-1024x392.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.21-PM-300x115.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.21-PM-768x294.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.21-PM-560x214.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.21-PM.png 1248w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Use another tool like rclone to list the bucket contents independently and verify the file was uploaded:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97099\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.43-PM-1024x76.png\" alt=\"\" width=\"1024\" height=\"76\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.43-PM-1024x76.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.43-PM-300x22.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.43-PM-768x57.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.43-PM-560x41.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-11-at-1.41.43-PM.png 1246w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Or, of course, look in the Backblaze B2 web admin:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97094\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image8-1-1024x597.png\" alt=\"\" width=\"1024\" height=\"597\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image8-1-1024x597.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image8-1-300x175.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image8-1-768x448.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image8-1-1536x895.png 1536w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image8-1-560x326.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image8-1.png 1812w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>And finally, looking in the local system\u2019s dir_download folder, see the file you downloaded:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-97095\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/image10-1-1024x594.png\" alt=\"\" width=\"1024\" height=\"594\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image10-1-1024x594.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image10-1-300x174.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image10-1-768x446.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image10-1-1536x891.png 1536w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image10-1-560x325.png 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/image10-1.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>With that\u2014and code at <a href=\"https:\/\/github.com\/GiantRavens\/backblazeS3\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/GiantRavens\/backblazeS3<\/a>\u2014you have enough to explore further, connect to Backblaze B2 buckets with the <a href=\"https:\/\/www.backblaze.comhttps:\/\/www.backblaze.com\/docs\/en\/cloud-storage-s3-compatible-api\">S3 API<\/a>, list objects, pass in file names to upload, and more.<\/p>\n<h2>Get Started With Go and Cloud Storage<\/h2>\n<p>With your app written in Go and connected to cloud storage, you\u2019re able to grow at hyperscale. Happy hunting!<\/p>\n<p>If you\u2019ve already built an app with Go and have some feedback for us, we\u2019d love to hear from you in the comments. And if it\u2019s your first time writing in Go, let us know what you\u2019d like to learn more about!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn more about using Go in your development environment with this primer for connecting an app to cloud storage.<\/p>\n","protected":false},"author":135,"featured_media":97079,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[7],"tags":[468],"class_list":["post-97078","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-storage","tag-b2cloud","entry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage<\/title>\n<meta name=\"description\" content=\"Learn more about using Go in your development environment with this primer for connecting an app to cloud storage.\" \/>\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.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage\" \/>\n<meta property=\"og:description\" content=\"Learn more about using Go in your development environment with this primer for connecting an app to cloud storage.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/\" \/>\n<meta property=\"og:site_name\" content=\"Backblaze Blog | Cloud Storage &amp; Cloud Backup\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/backblaze\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-15T16:57:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-24T00:15:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1440\" \/>\n\t<meta property=\"og:image:height\" content=\"820\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Skip Levens\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ActiveSkip\" \/>\n<meta name=\"twitter:site\" content=\"@backblaze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Skip Levens\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage","description":"Learn more about using Go in your development environment with this primer for connecting an app to cloud storage.","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.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/","og_locale":"en_US","og_type":"article","og_title":"Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage","og_description":"Learn more about using Go in your development environment with this primer for connecting an app to cloud storage.","og_url":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/","og_site_name":"Backblaze Blog | Cloud Storage &amp; Cloud Backup","article_publisher":"https:\/\/www.facebook.com\/backblaze","article_published_time":"2020-12-15T16:57:45+00:00","article_modified_time":"2024-08-24T00:15:08+00:00","og_image":[{"width":1440,"height":820,"url":"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg","type":"image\/jpeg"}],"author":"Skip Levens","twitter_card":"summary_large_image","twitter_creator":"@ActiveSkip","twitter_site":"@backblaze","twitter_misc":{"Written by":"Skip Levens","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#article","isPartOf":{"@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/"},"author":{"name":"Skip Levens","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/61099cf27432c4a0d70e71b65bbf81ac"},"headline":"Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage","datePublished":"2020-12-15T16:57:45+00:00","dateModified":"2024-08-24T00:15:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/"},"wordCount":1095,"commentCount":0,"publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg","keywords":["B2Cloud"],"articleSection":["Cloud Storage"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/","url":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/","name":"Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage","isPartOf":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#primaryimage"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg","datePublished":"2020-12-15T16:57:45+00:00","dateModified":"2024-08-24T00:15:08+00:00","description":"Learn more about using Go in your development environment with this primer for connecting an app to cloud storage.","breadcrumb":{"@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#primaryimage","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg","width":1440,"height":820},{"@type":"BreadcrumbList","@id":"https:\/\/www.backblaze.com\/blog\/development-roadmap-power-up-apps-with-go-programming-language-and-cloud-storage\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Development Roadmap: Power Up Apps With Go Programming Language and Cloud Storage"}]},{"@type":"WebSite","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","name":"Backblaze Cloud Solutions Blog","description":"Cloud Storage &amp; Cloud Backup","publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization","name":"Backblaze","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","width":512,"height":512,"caption":"Backblaze"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/backblaze","https:\/\/x.com\/backblaze","https:\/\/www.youtube.com\/user\/Backblaze","https:\/\/en.wikipedia.org\/wiki\/Backblaze"]},{"@type":"Person","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/61099cf27432c4a0d70e71b65bbf81ac","name":"Skip Levens","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7e13d3b2bb9bfa19a924abe25b9aecc27dcdd7713964efb12c95ea1ff63efd48?s=96&d=blank&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7e13d3b2bb9bfa19a924abe25b9aecc27dcdd7713964efb12c95ea1ff63efd48?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7e13d3b2bb9bfa19a924abe25b9aecc27dcdd7713964efb12c95ea1ff63efd48?s=96&d=blank&r=g","caption":"Skip Levens"},"description":"Skip drives Backblaze's outreach to Creative and Media and Entertainment customers - and has been a long-time champion of intelligent digital storytelling and television and film production workflows.","sameAs":["https:\/\/x.com\/ActiveSkip"],"url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/author\/skip\/"}]}},"jetpack_featured_media_url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2020\/12\/bb-bh-GoBB.jpg","_links":{"self":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/97078","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/users\/135"}],"replies":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/comments?post=97078"}],"version-history":[{"count":0,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/97078\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media\/97079"}],"wp:attachment":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media?parent=97078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/categories?post=97078"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/tags?post=97078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}