{"id":906,"date":"2022-04-19T10:11:20","date_gmt":"2022-04-19T10:11:20","guid":{"rendered":"https:\/\/www.workfall.com\/learning\/blog\/?p=906"},"modified":"2023-04-27T08:19:53","modified_gmt":"2023-04-27T08:19:53","slug":"how-to-use-go-modules-for-package-management","status":"publish","type":"post","link":"https:\/\/learning.workfall.com\/learning\/blog\/how-to-use-go-modules-for-package-management\/","title":{"rendered":"Go Modules for Package Management"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\">8<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>\n<p><img src=\"https:\/\/lh4.googleusercontent.com\/I1_W9C4IK96d1SzskwHpdys8yf5oAfKvKzpk1L_IF7Mg07TC5hrn_Lck8EIkfrquo9WpmYkjxw3Yk-HhZA1oZhGajDmaq45uTYfUwjb3cXH2gmTHIvj5PXROmM0hTQ\" style=\"width: 1600px;\"><\/p>\n\n\n\n<p class=\"has-text-align-justify\">Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Package management is an essential key for every project set up to improve delivery time for developers. Programming languages like Python, Node.js, etc. have standard package managers which are used extensively by developers. These package managers help in downloading, updating, or removing project dependencies quickly and efficiently.<\/p>\n\n\n\n<p>In this blog, we will cover:<\/p>\n\n\n\n<ul><li>What is Golang?<\/li><li>Advantages of Golang<\/li><li>What is a Go module?<\/li><li>Challenges before the Go module<\/li><li>Features of Go module<\/li><li>Commands for Go module<\/li><li>GOPATH<\/li><li>Package vs Module<\/li><li>Prerequisites<\/li><li>Hands-on<\/li><li>Conclusion<\/li><\/ul>\n\n\n\n<h2>What is Golang?<\/h2>\n\n\n\n<p class=\"has-text-align-justify\">Go, often known as Golang, is a Google-developed open-source, compiled, and statically typed computer language. It&#8217;s designed to be simple, fast, readable, and efficient, making it a popular choice for developers. Moreover, it is concurrent in nature, which means it can run multiple tasks at the same time.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Go finds its use in backend programming, game development, cloud-based programming, data science, etc. It is also used for making command-line tools.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Google, Netflix, Twitch, Ethereum, Dropbox, Kubernetes, Docker, Heroku, and a slew of other digital heavyweights use Go today.<\/p>\n\n\n\n<h2>Advantages of Golang<\/h2>\n\n\n\n<ul><li>Developers can build projects in the directory of their choice with the help of Go modules.<\/li><\/ul>\n\n\n\n<ul><li>Testing Support is a feature that allows us to run multiple unit tests on our code.<\/li><\/ul>\n\n\n\n<ul><li>There is no need to include any header files in the programme because of the Golang Package system, which allows you to use the functionality of other files.<\/li><\/ul>\n\n\n\n<ul><li>It includes statically typed programming, which includes compilation, type conversion, and comparison.<\/li><\/ul>\n\n\n\n<ul><li>It comes with a powerful standard library that assists developers in creating projects in both an effective and simpler manner.<\/li><\/ul>\n\n\n\n<ul><li>Error checking is provided by the Go compiler, which can identify variables that have been unused, missing or imported packages that are required to run, and mistyped or invalid operations.<\/li><\/ul>\n\n\n\n<h2>What is a Go module?<\/h2>\n\n\n\n<p class=\"has-text-align-justify\">Go or Golang, written in C, is an Algorithmic Language with features like Garbage Collection, Memory Safety, Statically Typing, and CSP-Style Concurrent Programming.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Go Modules, like npm in Node.js and pip in Python, are now the default manner of handling dependencies in Golang. Version 1.11 added Go modules, a feature to manage the libraries a Go project depends on. Go modules is a built-in dependency versioning and management feature in Go. It consists of a collection of Go packages and libraries or projects.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">In the early versions of Go, developers had to add their dependencies in the GOPATH directory. With the help of the Go modules, developers can create projects in any directory of their choice.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">In a Go project, Go Modules introduce two new files:<\/p>\n\n\n\n<ul><li>go.mod gives the name of the module, as well as its dependencies and minimum versions.<\/li><\/ul>\n\n\n\n<ul><li>go.sum is a dependency lock file that is generated automatically.<\/li><\/ul>\n\n\n\n<p>Both files are contained in the project&#8217;s root directory.<\/p>\n\n\n\n<h2>Challenges before the Go module<\/h2>\n\n\n\n<p class=\"has-text-align-justify\">When it comes to Golang, the early versions had no dependency management system. <strong>go get<\/strong> was the command used to download such dependency in our <strong>GOPATH<\/strong> directory. It looks a bit odd because, in the case of any major updates in a particular package, there is a high probability that our application would break.<br><br>Later on, third parties tools like <strong>dep<\/strong> and <strong>vendoring<\/strong> came along, but the Go language itself had no internal tool to resolve this.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">With Go 1.11, Go modules were introduced. The advent of Go Modules has completely changed the landscape of Golang dependency management. The package management system resolves dependency versioning concerns, ensures explicit dependency information, and simplifies other dependency management duties.<\/p>\n\n\n\n<h2>Features of Go module<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh4.googleusercontent.com\/aaleuqcnjPaqitS2TEclFKkRm67nR24wNBQk1jdJHQR_KdKmgfpj3MiM87_IBB_6GUsl6CTj39BJc59ax6fMgrQnqtr5IdMdmZzeJOd9bKPOv3FlbIw5SzFACubXqw\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<ul><li>The Go module can also store dependencies in the vendor directory, allowing different projects to use various versions of the same packages.<\/li><\/ul>\n\n\n\n<ul><li>There is no need to install additional tools &amp; software because Go Modules is a built-in function.<\/li><\/ul>\n\n\n\n<ul><li>Automatically check for dependencies when doing build, run, or test.<\/li><\/ul>\n\n\n\n<h2>Commands for Go module<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh4.googleusercontent.com\/VPra5lP2FkNNF8RWNELTvFLDd4g1Mah3nsJ2dsFAAKTRIuhjhv5I1ZtDR1M3AORxjyxGtG6vkh0S6YbMOdwu6zzzkmkmh0XTyMWh0RwBu8NYDe42IjmU4gLiO3ed8Q\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<ul><li><strong>go mod init<\/strong>: creates a whole new module in the current directory.<\/li><li><strong>go mod tidy<\/strong>: fixes missing modules and removes others who aren&#8217;t in use.<\/li><li><strong>go mod download<\/strong>: downloads modules to your device&#8217;s cache.<\/li><li><strong>go mod vendor<\/strong>: this creates a vendored copy of dependencies.<\/li><li><strong>go mod graph<\/strong>: prints module requirement graph<\/li><li><strong>go mod verify<\/strong>: verifies dependencies have expected content<\/li><li><strong>go mod why<\/strong>: explains the need for packages or modules<\/li><\/ul>\n\n\n\n<h2>GOPATH<\/h2>\n\n\n\n<p class=\"has-text-align-justify\">Earlier projects had to be created inside the $GOPATH, which is an environmental variable that points to the directory where your Go workspace exists before Go Modules were introduced.<\/p>\n\n\n\n<p>Go manages your project files, and dependencies, and installed binaries in this workspace.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">When it comes to setting up a development environment and understanding how the compiler manages dependencies for a project, the use of $GOPATH mechanisms proved to be restrictive and provided a bit of a learning experience for Go beginners.<\/p>\n\n\n\n<h2>Package vs Module<\/h2>\n\n\n\n<p class=\"has-text-align-justify\">A <strong>package<\/strong> is a directory of .go files, and it is the basic building block of a Go program. Packages help to organize code into reusable components.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">On the other side, a <strong>module<\/strong> is a collection of packages with built-in dependencies and versioning. A module comes with two additional files<strong> go.mod<\/strong> and <strong>go.sum<\/strong>.<\/p>\n\n\n\n<h2>Prerequisites<\/h2>\n\n\n\n<ol><li><a href=\"https:\/\/go.dev\/doc\/install\">Go installed in your system<\/a><br>a. Version should be 1.11 or more.<\/li><\/ol>\n\n\n\n<h2>Hands-on<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/E-zPhSuBTw-7GmoZtIJm12scXJIMeSQaQ6yCokrJ8J0Q2_1tfLXf3BRJs-zDchSrgjCVUyW88U-X3ddDc1gymYPPYDS5Rkj7UnQG0p-rne29LHrYv6yfQe0ZtMGJgw\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<h3><strong>Creating a new Go module<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-justify\">We will start with creating a new directory that can be located anywhere. As mentioned earlier, with the release of Go modules, we can create a go project anywhere other than the GOPATH directory.&nbsp;<\/p>\n\n\n\n<p>Let us create a project directory and switch to it using the command.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh4.googleusercontent.com\/P4wY_z0R1tX5iVvUEkmzWZCipF8TFKrDoJVrgNNjrazMRF0DY2KHY_SpqEP2QUbzbALdSNZOk4wocNQwjhL1mR64xFN8OFNX67M4dB-MHrs9il1OdExwa21DthJA3zNmYIXvdCvn\" alt=\"\"\/><\/figure>\n\n\n\n<p>Next, we will create a module directory with the name as <strong>newmodule<\/strong>.<\/p>\n\n\n\n<p><strong>Note<\/strong>: The name of the project directory and the module are usually the same.&nbsp;<\/p>\n\n\n\n<p>Now, in the project directory, run the below command.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/RqRarZJYVvykE4p8GsS5x8O8odoq1mqRJsqtECW75wPGCwODfMjJX7QOAhPKOPY4FLquAglovfOcb9JlxDp5Bv5NXM7ZeJcsxKfXR2Yp27QH4b1S-RF64HbvvvXcfh2zRXw5Xr_Z\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">The module must then be configured. For this, the go tool has provided us with a command to initialize the module <strong><code>go mod init &lt;module_name&gt;<\/code><\/strong>. To execute this command, we should navigate to our <strong>newmodule<\/strong> directory.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/wk23Mxnj_W_oKI4HD03dShHF22KRY1beECCvHToeqgUGsfLG_5Kgcx9mMCGpnG-_N_D4RvzmXKIKAU3P5z_G8OE6EyWUKIreK3ItD4LYSAiJ4PvddYt7w3qVzIhLYvhhQoQLreJP\" alt=\"\"\/><\/figure>\n\n\n\n<p>If we open the go.mod file, we will see the below output &#8211;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh4.googleusercontent.com\/LCzK9aVU-QQ2F3GncSgjeygnEHnuJ4CAyNfkJwdPKwHGqhyfFmOrhEH2QhI0k5T7qQevS5_JSig9iAsQhOLv2WXk8QPM9EFE8zP5ygMlcrwoYiGolUk6Ee08zOimjWLTGBgXf6oO\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">The last line &#8211; `go 1.17`,&nbsp; specifies the version of Go used in creating the module. The first line mentions the name of our module passed to <strong><code>go mod init<\/code><\/strong> command. It tells Go to search our <strong>newmodule<\/strong> in this module directly and not anywhere else whenever we import this newmodule in our .go files.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">This file expands when more dependencies get added to our project. Currently, our module does nothing. Let us add a small code to see how modules work.<\/p>\n\n\n\n<h3><strong>First Go module code<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-justify\">Let\u2019s create a <strong>main.go<\/strong> file in our newmodule directory. The <strong>main.go<\/strong> file is commonly used to specify the starting point of a program.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">We will try to print <strong>My first Go module<\/strong> in the main.go file.&nbsp; Let us add the below code:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/z26T1TByQwzA7brNjGRXZK9KNBStcwtNYVfnrmEn_2gE8D8ilyzlF_lOWpaow3T41AcNUUW-a7K3LMqWkmJwyzpsNk8wiwvv6jSMmQpz6IlN_-ejc5_ZlxLj7TBgHK8ZE-QNDyvC\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">The important point to note here is in Go every directory is a package in itself. In our file, we have added the main package which specifies that this should be considered as binary and must be compiled into an executable file.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">The main function carries an important role too. When Go sees a function named as <strong>main<\/strong> inside the <strong>main package<\/strong>, it gets executed first. The main function is the entry point for our Go application.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">To run our Go program, we can directly use <strong>go run main.go<\/strong> or create an executable binary using <strong>go build<\/strong>. Let us run our new module directly using the <strong>go run<\/strong> command.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/0ev2_5qYv6wWRMDB7XCUFJqZi0R916-iDwEGYGPTaC_rHOO5ALMCMxah6RXygG12DPJEbdqj8LgqfrL_jgDKecT1uYngahsLgKFHZSS2PeE59MhccoNc0DAiGdHYxH94SOQFV5Fh\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">To create a binary, we will execute the<strong> go run<\/strong> command. It should not raise any errors. This will create a <strong>newmodule<\/strong> binary in our newmodule directory. We can execute this binary using the <strong><code>.\/newmodule<\/code><\/strong> command and it should print the required result.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh6.googleusercontent.com\/0PiFnVHB8dLhqoEODDCCjqOa-YG3TXOxvGYhn3SmijaTcab268HaHh3cYMIKeg7zkkPRcOlTCREPR6wPIl7w6DdnRsMBCP7WlvCpT5pQq42kTPhptATJG109FMbMCSrPhKKa3V1u\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Here we have verified our Go module is functioning correctly without any errors and it is available for adding a package.<\/p>\n\n\n\n<h3><strong>Adding a package <\/strong><strong>to<\/strong><strong> our newmodule<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-justify\">As mentioned in the <strong>Package versus Module<\/strong> section, a module can contain multiple packages. We can also add a package inside another package. Let us create a package named newpackage in the <strong>newmodule<\/strong> directory and add a <strong>newpackage.go<\/strong> file inside it.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh6.googleusercontent.com\/x5X2AKsFMs0OaSCd6Ek49vtOc6vjYWfhn_YnFWJTE6JDTf8VAIIQarYTgL8MXyh6Ki7w-VJ5e9kar_XHwHU6Xq4P8bPt-qLa1w0rBigvI-SJ6CrRTYwplK0eNpnGoTGnWNUMsBY4\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<p>In our <strong>newpackage.go<\/strong> file, let us add the below code.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh6.googleusercontent.com\/GjWGKkwnL6bXur6FQGki7MiJAILttWgkG2H5bi6PBcGye1kTPwdi7yldCzKXs54rTBAhcqQ42vA028zyoefmJq9YAYxcgls6luGoNkynBShelVflNMoiW0xhqfrpU10a8DNMbtvb\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">The first line mentions the package name. Notice the function name <strong>PackageMessage<\/strong> is <strong>capitalised<\/strong>. It is important because the PackageMessage function should be available to any outside program. Once this file is set we need to test this behaviour in the newly created module.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">We navigate back to our <strong>newmodule<\/strong> directory and import newpackage.go in our main.go file. We will call the PackageMessage function inside our main.go and run this module.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/1ap5WLpqiD2CtkLwG24Vj4AjAMacAud7fuHIDa4pfC246tRotgHztxjA8VSMqdzaQZAgyjiCWNBpKFxLWfBbkOgR1hI9iZPKkHexpBQ1rAM7ARLrZN1FHMTk4S0tkWGLaitEoSdm\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<p>We execute the above code using <strong>go run main.go<\/strong> and should observe the output as below:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh6.googleusercontent.com\/i3yIt7LOtrSv5OGbD2bXVNy5JGmSdyPNuExz6MIrb22e7hwWWbB35NouuDD2m3IVrswA2xfz4EXp7l276hwjoJXI6AQmmGHH-BM0xUM37LPxHUTlsllDPB7dFTnHc2cH4nzdeXkz\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Or we can also run go build, which will regenerate the binary, and when we run .\/newmodule we should see the same output as above.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">The import path for a newpackage is newmodule\/newpackage. The newmodule is the same module name, we set in the go.mod file.<\/p>\n\n\n\n<h3><strong>Adding remote module as a dependency<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-justify\">Tests are extremely important when working with any programming language. In Go, we have one such testing framework as <a href=\"https:\/\/github.com\/onsi\/ginkgo\">Ginkgo<\/a>. So we can add this to our module using the <strong><code>go get<\/code><\/strong> command.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/kvT3gJ9A_AFzl9HMnN6eII-C2pqYEeg7aZDXTD4anIPpePKmn0p1bS49uFGoryUBvermZQHuVgDv6nhUHjvt7KYKXBI0sl-67rH-NcZCiVEGjc2_yco_vX2L1HXDvHk8uRsER-yJ\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh3.googleusercontent.com\/2djL8g7t-JyLf5AjrBb9ebfG2L5cef-KHoQddRaM7msH1Ut5H8uVHIUXUtlhFyuNLLJ4bTO_T_e24U8Da5FI1btFP1ay6bbs_dmewZVUPTKliUJN1cdLCyvMyAv_Np-nQDDWt5UQ\" alt=\"Go Modules for Package Management\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">When we run the go get command, it first looks for the ginkgo library on Github. By default, it downloads the latest code since we have not mentioned any specific version.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Once the command is executed successfully, we open the go.mod file and observe a new <strong>required<\/strong> block added. Go also adds the version which was downloaded when executing the go get command. The<strong> \/\/ indirect<\/strong> line specifies<strong> Indirect dependency, which is a dependency that wasn&#8217;t listed in go.mod of your direct dependency but is still required.&nbsp;<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-justify\">A new file <strong>go.sum<\/strong> also gets created after running the go run command. This file contains information used by Go to record specific hashes and versions of dependency. This makes sure the dependencies are consistent even if they are installed on different machines.<\/p>\n\n\n\n<p>If we want to install a dependency of a particular version or commit we can execute the below commands.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh5.googleusercontent.com\/esnXxt4iLXiem9IgJ4_0qJ6WdpOc4ZzvOFJFG3_8iOM0MhyjQproamCqCJB2loRMeLJlHjykQ9JNLW5vJupsTimXVt4_IChCNweYDIUYutNqESSeeGwh-Vi_Ey_LSqhFQR_9pQIx\" alt=\"\"\/><\/figure>\n\n\n\n<h3><strong>Removing a Go module<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-justify\">Removing any unused Go module is easy by using a terminal. We just need to run the below command in our project directory.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/lh4.googleusercontent.com\/LNdx5h8HrZju_1bg_6-BZCfvGfM1Qkd4Lkq57AETuB_fR7ls9jz0SOu9JK2Dc_EzlbMAAxSYUJ4aeIzRu7XzFcDZXoGqdRexC7zelv4HLiUNkRnoKECYkAOZppFDa44k-GSFWr22\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">Once this command is successfully executed, it will remove any unused dependencies and update the <strong>go.mod<\/strong> file. The command also adds any missing dependencies, like an external package that we wanted to fetch failed first with the <strong><code>go get<\/code><\/strong> command.&nbsp;<\/p>\n\n\n\n<h2>Conclusion<\/h2>\n\n\n\n<p class=\"has-text-align-justify\">In this blog, we&#8217;ve explored how Go Modules are implemented for Golang package management. The Go module feature is a big relief for developers which enhanced the package dependency management. It has simplified the installation, up-gradation, and removal of dependencies without relying on external tools. Stay tuned to keep getting all updates about our upcoming new blogs on different technologies.<\/p>\n\n\n\n<p>Meanwhile\u2026<\/p>\n\n\n\n<p><strong>Keep Exploring -&gt; Keep Learning -&gt; Keep Mastering<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-justify\">This blog is part of our effort towards building a knowledgeable and kick-ass tech community. At <a href=\"https:\/\/www.workfall.com\/\">Workfall<\/a>, we strive to provide the best tech and pay opportunities to AWS-certified talents. If you\u2019re looking to work with global clients, build kick-ass products while making big bucks doing so, give it a shot at <a href=\"https:\/\/www.workfall.com\/partner\/\">workfall.com\/partner<\/a> today.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\">8<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span> Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder. Package management is an essential key for every project set up to improve delivery time for developers. Programming languages like Python, Node.js, etc. have standard package managers which are used extensively by developers. These package [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":907,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[288],"tags":[268,269,270,271,265,266,272,6],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Go Modules for Package Management - The Workfall Blog<\/title>\n<meta name=\"description\" content=\"Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go Modules for Package Management - The Workfall Blog\" \/>\n<meta property=\"og:description\" content=\"Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/\" \/>\n<meta property=\"og:site_name\" content=\"The Workfall Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/workfall\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-19T10:11:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-27T08:19:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/18.141.20.153\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@workfall\" \/>\n<meta name=\"twitter:site\" content=\"@workfall\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Workfall\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#organization\",\"name\":\"Workfall - Hire #Kickass Coders On Demand\",\"url\":\"https:\/\/learning.workfall.com\/learning\/blog\/\",\"sameAs\":[\"https:\/\/www.instagram.com\/workfall\/\",\"https:\/\/www.linkedin.com\/company\/workfall\/\",\"https:\/\/facebook.com\/workfall\",\"https:\/\/twitter.com\/workfall\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i1.wp.com\/18.141.20.153\/learning\/blog\/wp-content\/uploads\/2021\/10\/cropped-WF_logo.png?fit=400%2C400\",\"contentUrl\":\"https:\/\/i1.wp.com\/18.141.20.153\/learning\/blog\/wp-content\/uploads\/2021\/10\/cropped-WF_logo.png?fit=400%2C400\",\"width\":400,\"height\":400,\"caption\":\"Workfall - Hire #Kickass Coders On Demand\"},\"image\":{\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#website\",\"url\":\"https:\/\/learning.workfall.com\/learning\/blog\/\",\"name\":\"The Workfall Blog\",\"description\":\"#Tech #Remote #Jobs\",\"publisher\":{\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/learning.workfall.com\/learning\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#primaryimage\",\"url\":\"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png\",\"contentUrl\":\"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png\",\"width\":1200,\"height\":628,\"caption\":\"Go Programming Language - Package Management\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#webpage\",\"url\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/\",\"name\":\"Go Modules for Package Management - The Workfall Blog\",\"isPartOf\":{\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#primaryimage\"},\"datePublished\":\"2022-04-19T10:11:20+00:00\",\"dateModified\":\"2023-04-27T08:19:53+00:00\",\"description\":\"Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder.\",\"breadcrumb\":{\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/learning.workfall.com\/learning\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go Modules for Package Management\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#webpage\"},\"author\":{\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/person\/cab8236044692bc5b27606b13167794a\"},\"headline\":\"Go Modules for Package Management\",\"datePublished\":\"2022-04-19T10:11:20+00:00\",\"dateModified\":\"2023-04-27T08:19:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#webpage\"},\"wordCount\":1902,\"publisher\":{\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png\",\"keywords\":[\"go\",\"golang\",\"gomodules\",\"gopath\",\"node\",\"npm\",\"packagemanagement\",\"workfall\"],\"articleSection\":[\"Backend Development\"],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/person\/cab8236044692bc5b27606b13167794a\",\"name\":\"Workfall\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2023\/09\/avatar_user_1_1693914404-96x96.png\",\"contentUrl\":\"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2023\/09\/avatar_user_1_1693914404-96x96.png\",\"caption\":\"Workfall\"},\"sameAs\":[\"https:\/\/www.workfall.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Go Modules for Package Management - The Workfall Blog","description":"Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder.","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:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/","og_locale":"en_US","og_type":"article","og_title":"Go Modules for Package Management - The Workfall Blog","og_description":"Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder.","og_url":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/","og_site_name":"The Workfall Blog","article_publisher":"https:\/\/facebook.com\/workfall","article_published_time":"2022-04-19T10:11:20+00:00","article_modified_time":"2023-04-27T08:19:53+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/18.141.20.153\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_creator":"@workfall","twitter_site":"@workfall","twitter_misc":{"Written by":"Workfall","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/learning.workfall.com\/learning\/blog\/#organization","name":"Workfall - Hire #Kickass Coders On Demand","url":"https:\/\/learning.workfall.com\/learning\/blog\/","sameAs":["https:\/\/www.instagram.com\/workfall\/","https:\/\/www.linkedin.com\/company\/workfall\/","https:\/\/facebook.com\/workfall","https:\/\/twitter.com\/workfall"],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i1.wp.com\/18.141.20.153\/learning\/blog\/wp-content\/uploads\/2021\/10\/cropped-WF_logo.png?fit=400%2C400","contentUrl":"https:\/\/i1.wp.com\/18.141.20.153\/learning\/blog\/wp-content\/uploads\/2021\/10\/cropped-WF_logo.png?fit=400%2C400","width":400,"height":400,"caption":"Workfall - Hire #Kickass Coders On Demand"},"image":{"@id":"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/learning.workfall.com\/learning\/blog\/#website","url":"https:\/\/learning.workfall.com\/learning\/blog\/","name":"The Workfall Blog","description":"#Tech #Remote #Jobs","publisher":{"@id":"https:\/\/learning.workfall.com\/learning\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/learning.workfall.com\/learning\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#primaryimage","url":"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png","contentUrl":"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png","width":1200,"height":628,"caption":"Go Programming Language - Package Management"},{"@type":"WebPage","@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#webpage","url":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/","name":"Go Modules for Package Management - The Workfall Blog","isPartOf":{"@id":"https:\/\/learning.workfall.com\/learning\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#primaryimage"},"datePublished":"2022-04-19T10:11:20+00:00","dateModified":"2023-04-27T08:19:53+00:00","description":"Go 1.11 introduces Go modules for better package management that allows dependencies to be located outside of the $GOPATH\/src folder.","breadcrumb":{"@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/learning.workfall.com\/learning\/blog\/"},{"@type":"ListItem","position":2,"name":"Go Modules for Package Management"}]},{"@type":"Article","@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#article","isPartOf":{"@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#webpage"},"author":{"@id":"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/person\/cab8236044692bc5b27606b13167794a"},"headline":"Go Modules for Package Management","datePublished":"2022-04-19T10:11:20+00:00","dateModified":"2023-04-27T08:19:53+00:00","mainEntityOfPage":{"@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#webpage"},"wordCount":1902,"publisher":{"@id":"https:\/\/learning.workfall.com\/learning\/blog\/#organization"},"image":{"@id":"https:\/\/18.141.20.153\/learning\/blog\/how-to-use-go-modules-for-package-management\/#primaryimage"},"thumbnailUrl":"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png","keywords":["go","golang","gomodules","gopath","node","npm","packagemanagement","workfall"],"articleSection":["Backend Development"],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/person\/cab8236044692bc5b27606b13167794a","name":"Workfall","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/learning.workfall.com\/learning\/blog\/#\/schema\/person\/image\/","url":"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2023\/09\/avatar_user_1_1693914404-96x96.png","contentUrl":"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2023\/09\/avatar_user_1_1693914404-96x96.png","caption":"Workfall"},"sameAs":["https:\/\/www.workfall.com"]}]}},"jetpack_featured_media_url":"https:\/\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-2.png","jetpack-related-posts":[{"id":2453,"url":"https:\/\/learning.workfall.com\/learning\/blog\/how-to-create-rest-api-in-spring-boot-and-perform-crud-operations-with-mysql-database\/","url_meta":{"origin":906,"position":0},"title":"How to Create Rest API in Spring Boot and Perform CRUD Operations with MySQL Database?","date":"October 3, 2023","format":false,"excerpt":"In this blog, we will cover: What are CRUD Operations?What is Spring Boot?What is MySQL Database?What is REST APIHands-OnConclusion What are CRUD Operations? CRUD represents Create, Read\/Retrieve, Update, and Delete \u2013 fundamental actions on persistent storage, aligned with HTTP methods used in web development and database management: - POST: Establishes\u2026","rel":"","context":"In &quot;Backend Development&quot;","img":{"alt_text":"Create Rest API in Spring Boot and Perform CRUD Operations with MySQL Database","src":"https:\/\/i2.wp.com\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2023\/10\/Tech-Blogs-Cover-Images_Part3.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1177,"url":"https:\/\/learning.workfall.com\/learning\/blog\/how-to-make-use-of-an-npm-package-highcharts-to-plot-network-graphs-in-angular\/","url_meta":{"origin":906,"position":1},"title":"How to make use of an npm package Highcharts to plot Network Graphs in Angular?","date":"August 23, 2022","format":false,"excerpt":"Angular, an open-source web application framework, is a popular choice among web developers. To create flexibility for users to plot network graphs with the provided data, we will demonstrate how to make use of an npm package Highcharts to plot Network Graphs in Angular. In this blog, we will cover:\u2026","rel":"","context":"In &quot;Frontend Development&quot;","img":{"alt_text":"Network Graphs in Angular","src":"https:\/\/i1.wp.com\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/08\/Cover-Images_Part2-1-3.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":902,"url":"https:\/\/learning.workfall.com\/learning\/blog\/how-to-plot-bar-charts-in-angular-using-npm-package-highcharts\/","url_meta":{"origin":906,"position":2},"title":"How to plot Bar Charts in Angular using npm package Highcharts?","date":"April 12, 2022","format":false,"excerpt":"Highcharts have been around since 2009 helping IT professionals, deep tech aficionados, and even recent graduates to present data in a user-friendly manner.\u00a0 It is basically a complex word for charts used by developers while in the development stage of web applications. It comes with extensive documentation, high responsiveness, and\u2026","rel":"","context":"In &quot;Frontend Development&quot;","img":{"alt_text":"Plot Bar Charts in Angular JS","src":"https:\/\/i1.wp.com\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/04\/Cover-Images_Part2-1.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1121,"url":"https:\/\/learning.workfall.com\/learning\/blog\/how-to-show-flash-messages-in-node-js-using-the-connect-flash-package\/","url_meta":{"origin":906,"position":3},"title":"How to Show Flash Messages in Node.js using the Connect-flash Package?","date":"August 9, 2022","format":false,"excerpt":"The Node.js Connect-flash module is extremely useful for developers whenever a flash message needs to be sent. When a user is redirected to a specific webpage, the connect-flash module in Node.js allows developers to display a pop-up message. For example, in your Node.js demo application, you might want to notify\u2026","rel":"","context":"In &quot;Backend Development&quot;","img":{"alt_text":"Flash messages in Node.js","src":"https:\/\/i2.wp.com\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/08\/Cover-Images_Part2.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1021,"url":"https:\/\/learning.workfall.com\/learning\/blog\/how-to-write-clean-code-with-dependency-injection-in-java\/","url_meta":{"origin":906,"position":4},"title":"How to write Clean Code with Dependency Injection in Java?","date":"July 5, 2022","format":false,"excerpt":"Although Dependency Injection is frequently used to support numerous use cases, probably its most obvious application is to make testing simpler. A fantastic application development principle called dependency injection will make your code incredibly flexible, reusable, and uncoupled. With the ever-changing complexity of application development, the concept behind Dependency Injection\u2026","rel":"","context":"In &quot;Backend Development&quot;","img":{"alt_text":"Dependency Injection in Java","src":"https:\/\/i2.wp.com\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2022\/07\/Cover-Images_Part2-1.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2408,"url":"https:\/\/learning.workfall.com\/learning\/blog\/how-to-simplify-data-pipelines-with-dbt-and-airflow\/","url_meta":{"origin":906,"position":5},"title":"How to Simplify Data Pipelines with DBT and Airflow?","date":"August 14, 2023","format":false,"excerpt":"In today's data-driven world, efficient data pipelines have become the backbone of successful organizations. These pipelines ensure that data flows smoothly from various sources to its intended destinations, enabling businesses to make informed decisions and gain valuable insights. Two powerful tools that have emerged to simplify the management of data\u2026","rel":"","context":"In &quot;Backend Development&quot;","img":{"alt_text":"How To Simplify Data Pipelines With DBT And Airflow?","src":"https:\/\/i2.wp.com\/learning.workfall.com\/learning\/blog\/wp-content\/uploads\/2023\/08\/Cover-Images_Part2-1-2.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/posts\/906"}],"collection":[{"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/comments?post=906"}],"version-history":[{"count":6,"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/posts\/906\/revisions"}],"predecessor-version":[{"id":1758,"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/posts\/906\/revisions\/1758"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/media\/907"}],"wp:attachment":[{"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/media?parent=906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/categories?post=906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learning.workfall.com\/learning\/blog\/wp-json\/wp\/v2\/tags?post=906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}