{"id":180,"date":"2026-07-07T20:35:03","date_gmt":"2026-07-07T20:35:03","guid":{"rendered":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/"},"modified":"2026-07-07T20:38:35","modified_gmt":"2026-07-07T20:38:35","slug":"11-go-goroutines-and-channels","status":"publish","type":"post","link":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","title":{"rendered":"Go Goroutines and Channels \u2013 Concurrency Made Simple"},"content":{"rendered":"<p><!-- ktg-updated-banner --><\/p>\n<div class=\"ktg-updated-banner\" style=\"margin:0 0 1.25em;padding:0.75em 1em;background:#fefce8;border-left:4px solid #ca8a04;border-radius:4px;\">\n<p><strong>Updated July 2, 2026.<\/strong> Refreshed for Go 1.22+ and current SEO best practices.<\/p>\n<\/div>\n<p>In this lesson we cover the <strong>Go goroutines tutorial<\/strong> fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed <a href=\"https:\/\/www.kindsonthegenius.com\/go\/10-go-interfaces-and-errors\/\">Go Interfaces and Errors<\/a>, you understand how Go handles failures. Now you will learn how it handles <em>parallelism<\/em> \u2014 running many tasks at once without the complexity of manual thread management.<\/p>\n<p><strong>Prerequisites:<\/strong> Lessons 1\u201310 completed, Go 1.22 or newer installed. <strong>Estimated time:<\/strong> 55\u201365 minutes.<\/p>\n<h4 id=\"goroutines\">1. Goroutines \u2014 Lightweight Concurrent Functions<\/h4>\n<p>A <strong>goroutine<\/strong> is a function running concurrently with other goroutines, managed by the Go runtime. Start one with the <code>go<\/code> keyword \u2014 no thread pools, no boilerplate:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc say(message string) {\n\tfor i := 0; i &lt; 3; i++ {\n\t\tfmt.Println(message)\n\t\ttime.Sleep(100 * time.Millisecond)\n\t}\n}\n\nfunc main() {\n\tgo say(\"from goroutine\") \/\/ runs concurrently\n\tsay(\"from main\")         \/\/ main goroutine\n\n\ttime.Sleep(500 * time.Millisecond) \/\/ wait for goroutine to finish\n\tfmt.Println(\"done\")\n}\n<\/code><\/pre>\n<p>Goroutines are cheap \u2014 you can run thousands or millions on a single machine. The Go scheduler multiplexes them onto a small number of OS threads. Unlike OS threads, goroutines start with a small stack (a few KB) that grows as needed. This is why Go services handle high concurrency with modest hardware.<\/p>\n<h4 id=\"channels\">2. Channels \u2014 Communicating Between Goroutines<\/h4>\n<p>Go&#8217;s motto is: <em>&#8220;Do not communicate by sharing memory; share memory by communicating.&#8221;<\/em> <strong>Channels<\/strong> are typed conduits that let goroutines send and receive values safely:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport \"fmt\"\n\nfunc worker(id int, jobs &lt;-chan int, results chan&lt;- int) {\n\tfor job := range jobs {\n\t\tfmt.Printf(\"worker %d processing job %d\\n\", id, job)\n\t\tresults &lt;- job * 2\n\t}\n}\n\nfunc main() {\n\tjobs := make(chan int, 5)\n\tresults := make(chan int, 5)\n\n\t\/\/ start 3 workers\n\tfor w := 1; w &lt;= 3; w++ {\n\t\tgo worker(w, jobs, results)\n\t}\n\n\t\/\/ send 5 jobs\n\tfor j := 1; j &lt;= 5; j++ {\n\t\tjobs &lt;- j\n\t}\n\tclose(jobs)\n\n\t\/\/ collect results\n\tfor r := 1; r &lt;= 5; r++ {\n\t\tfmt.Println(\"result:\", &lt;-results)\n\t}\n}\n<\/code><\/pre>\n<p>Channel directions matter: <code>&lt;-chan T<\/code> is receive-only; <code>chan&lt;- T<\/code> is send-only. This prevents accidental misuse at compile time. Always close channels when no more values will be sent \u2014 ranging over a channel (<code>for v := range ch<\/code>) exits when the channel is closed and drained.<\/p>\n<h4 id=\"architecture\">3. Goroutines + Channels Architecture<\/h4>\n<p>The diagram below shows a typical producer\u2013worker\u2013aggregator flow. The main goroutine sends jobs through a channel; worker goroutines process them in parallel; results flow back through a second channel.<\/p>\n<figure>\n<pre>\n  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     jobs chan      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n  \u2502   main()    \u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba \u2502  worker #1   \u2502\n  \u2502  (producer) \u2502                    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518     jobs chan      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     results chan    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n         \u2502         \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba \u2502  worker #2   \u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba \u2502  collector  \u2502\n         \u2502                            \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                     \u2502  (main)   \u2502\n         \u2502         jobs chan      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2510     results chan        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba \u2502  worker #3   \u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                                  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n  Flow: main sends jobs \u2192 workers process concurrently \u2192 results return via channel\n<\/pre><figcaption>Goroutines and channels: producer sends work, workers run in parallel, results flow back through a channel.<\/figcaption><\/figure>\n<p>This pattern appears everywhere in Go \u2014 HTTP handlers spawning background tasks, log processors, ETL pipelines, and microservice workers. Channels coordinate goroutines without mutexes in the common case, though shared state still needs protection when multiple goroutines write to the same variable.<\/p>\n<h4 id=\"buffered-channels\">4. Buffered vs Unbuffered Channels<\/h4>\n<p>An <strong>unbuffered<\/strong> channel blocks the sender until a receiver is ready, and vice versa \u2014 a direct handoff. A <strong>buffered<\/strong> channel (<code>make(chan T, n)<\/code>) holds up to <code>n<\/code> values before blocking:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport \"fmt\"\n\nfunc main() {\n\t\/\/ unbuffered \u2014 synchronous handoff\n\tch := make(chan string)\n\tgo func() { ch &lt;- \"hello\" }()\n\tfmt.Println(&lt;-ch)\n\n\t\/\/ buffered \u2014 sender does not block until buffer is full\n\tbuf := make(chan int, 3)\n\tbuf &lt;- 1\n\tbuf &lt;- 2\n\tbuf &lt;- 3\n\tfmt.Println(len(buf)) \/\/ 3\n}\n<\/code><\/pre>\n<p>Choose buffer size based on your workload. A buffer of zero (unbuffered) provides the strongest synchronization guarantee. A larger buffer decouples producers and consumers at the cost of memory and potential latency before backpressure kicks in.<\/p>\n<h4 id=\"select\">5. select \u2014 Multiplexing Channels<\/h4>\n<p>The <code>select<\/code> statement waits on multiple channel operations \u2014 like a <code>switch<\/code> for channels. It is essential for timeouts, cancellation, and merging streams:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\tch := make(chan string)\n\n\tgo func() {\n\t\ttime.Sleep(2 * time.Second)\n\t\tch &lt;- \"data ready\"\n\t}()\n\n\tselect {\n\tcase msg := &lt;-ch:\n\t\tfmt.Println(\"received:\", msg)\n\tcase &lt;-time.After(1 * time.Second):\n\t\tfmt.Println(\"timed out waiting for data\")\n\t}\n}\n<\/code><\/pre>\n<p><code>time.After<\/code> returns a channel that fires after a duration \u2014 a simple timeout pattern. In production code, use <code>context.Context<\/code> for cancellation (deadlines, client disconnects). The <code>select<\/code> with <code>ctx.Done()<\/code> is the standard way to stop goroutines gracefully when a request is cancelled.<\/p>\n<h4 id=\"sync-package\">6. sync Package \u2014 Mutexes and WaitGroups<\/h4>\n<p>Channels are not always the right tool. When goroutines share mutable state, use a <strong>mutex<\/strong> from the <code>sync<\/code> package. <code>sync.WaitGroup<\/code> waits for a group of goroutines to finish:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n)\n\nfunc main() {\n\tvar (\n\t\tmu    sync.Mutex\n\t\twg    sync.WaitGroup\n\t\ttotal int\n\t)\n\n\tfor i := 1; i &lt;= 100; i++ {\n\t\twg.Add(1)\n\t\tgo func(n int) {\n\t\t\tdefer wg.Done()\n\t\t\tmu.Lock()\n\t\t\ttotal += n\n\t\t\tmu.Unlock()\n\t\t}(i)\n\t}\n\n\twg.Wait()\n\tfmt.Println(\"sum 1..100 =\", total) \/\/ 5050\n}\n<\/code><\/pre>\n<p>Pass loop variables into goroutines as function arguments (<code>go func(n int) { ... }(i)<\/code>) \u2014 capturing the loop variable directly is a classic bug where every goroutine sees the final value. The <code>sync<\/code> package also provides <code>sync.Once<\/code>, <code>sync.Map<\/code>, and <code>sync.Pool<\/code> for specialized concurrency needs.<\/p>\n<h4 id=\"worker-pool\">7. Worker Pool Pattern<\/h4>\n<p>A <strong>worker pool<\/strong> limits concurrency by running a fixed number of goroutines that pull jobs from a channel. This prevents overwhelming databases, APIs, or CPU when work arrives faster than you can process it:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n)\n\nfunc fetchURL(url string) string {\n\ttime.Sleep(50 * time.Millisecond) \/\/ simulate network call\n\treturn \"response from \" + url\n}\n\nfunc main() {\n\turls := []string{\"\/api\/books\", \"\/api\/users\", \"\/api\/orders\", \"\/api\/health\"}\n\tjobs := make(chan string, len(urls))\n\tresults := make(chan string, len(urls))\n\n\tconst numWorkers = 2\n\tvar wg sync.WaitGroup\n\n\tfor w := 0; w &lt; numWorkers; w++ {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tfor url := range jobs {\n\t\t\t\tresults &lt;- fetchURL(url)\n\t\t\t}\n\t\t}()\n\t}\n\n\tfor _, u := range urls {\n\t\tjobs &lt;- u\n\t}\n\tclose(jobs)\n\n\tgo func() {\n\t\twg.Wait()\n\t\tclose(results)\n\t}()\n\n\tfor r := range results {\n\t\tfmt.Println(r)\n\t}\n}\n<\/code><\/pre>\n<p>This pattern scales from CLI tools to production microservices. In Lesson 12 you will build an HTTP server that handles each request in its own goroutine \u2014 the same concurrency model, applied to REST APIs.<\/p>\n<h4 id=\"next\">8. Next Steps<\/h4>\n<p>You now understand <strong>Go goroutines and channels<\/strong> \u2014 starting concurrent functions, sending values through channels, using <code>select<\/code> for timeouts, protecting shared state with mutexes, and building worker pools. In the final lesson you bring everything together in a <strong>complete HTTP REST API<\/strong> \u2014 structs, errors, JSON, and concurrent request handling with <code>net\/http<\/code>.<\/p>\n<p>Continue the series: <a href=\"https:\/\/www.kindsonthegenius.com\/go\/10-go-interfaces-and-errors\/\">Lesson 10 \u2013 Interfaces and Errors<\/a> \u00b7 <a href=\"https:\/\/www.kindsonthegenius.com\/go\/12-go-http-rest-api\/\">Lesson 12 \u2013 HTTP REST API (Capstone)<\/a><\/p>\n<h4 id=\"faq\">Frequently Asked Questions<\/h4>\n<p><strong>What is the difference between a goroutine and an OS thread?<\/strong><br \/>\nGoroutines are managed by the Go runtime and are much lighter than OS threads. Thousands of goroutines can run on a handful of threads, with the scheduler handling multiplexing.<\/p>\n<p><strong>When should I use channels vs mutexes?<\/strong><br \/>\nUse channels to pass ownership of data between goroutines. Use mutexes when multiple goroutines need to read and write shared state. Many programs use both.<\/p>\n<p><strong>How do I avoid goroutine leaks?<\/strong><br \/>\nEnsure every goroutine has a way to exit \u2014 cancelled context, closed channel, or completed work. Goroutines blocked forever on channel operations leak memory.<\/p>\n<p><!-- ktg-lesson-nav --><\/p>\n<nav class=\"ktg-lesson-nav\" aria-label=\"Lesson navigation\">\n<p><strong>Previous:<\/strong> <a href=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/\">Lesson 10: Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling<\/a><\/p>\n<p><strong>Next:<\/strong> <a href=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/12-go-http-rest-api\/\">Lesson 12: Go HTTP REST API \u2013 Build a Complete Books Service (Capstone)<\/a><\/p>\n<\/nav>\n<p><!-- ktg-alkademy-cta --><\/p>\n<div class=\"ktg-alkademy-cta\" style=\"margin:2em 0;padding:1.25em;border-left:4px solid #2563eb;background:#f8fafc;\">\n<p><strong>Want live Go or backend classes?<\/strong> Join <a href=\"https:\/\/www.alkademy.com\/courses\" target=\"_blank\" rel=\"noopener noreferrer\">Alkademy<\/a> for instructor-led programming courses with hands-on projects.<\/p>\n<\/div>\n<p><!-- ktg-faq-schema --><br \/>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is a goroutine in Go?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A lightweight thread managed by the Go runtime. Start one with the go keyword.\"}},{\"@type\":\"Question\",\"name\":\"What is a channel in Go?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A typed conduit for sending values between goroutines. Use make(chan T) to create one.\"}},{\"@type\":\"Question\",\"name\":\"When should I use sync.WaitGroup?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use WaitGroup to wait for a group of goroutines to finish before continuing.\"}}]}<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-180","post","type-post","status-publish","format-standard","hentry","category-go-programming"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"kindsonthegenius\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Go Programming Tutorial - Beginner to Expert Go Programming Tutorial\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Go Goroutines and Channels \u2013 Concurrency Made Simple - Go Programming Tutorial\" \/>\n\t\t<meta property=\"og:description\" content=\"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-07T20:35:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-07T20:38:35+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Go Goroutines and Channels \u2013 Concurrency Made Simple - Go Programming Tutorial\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#blogposting\",\"name\":\"Go Goroutines and Channels \\u2013 Concurrency Made Simple - Go Programming Tutorial\",\"headline\":\"Go Goroutines and Channels \\u2013 Concurrency Made Simple\",\"author\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/author\\\/kindsonthegenius-3\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#organization\"},\"datePublished\":\"2026-07-07T20:35:03+00:00\",\"dateModified\":\"2026-07-07T20:38:35+00:00\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#webpage\"},\"articleSection\":\"Go Programming\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/category\\\/go-programming\\\/#listItem\",\"name\":\"Go Programming\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/category\\\/go-programming\\\/#listItem\",\"position\":2,\"name\":\"Go Programming\",\"item\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/category\\\/go-programming\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#listItem\",\"name\":\"Go Goroutines and Channels \\u2013 Concurrency Made Simple\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#listItem\",\"position\":3,\"name\":\"Go Goroutines and Channels \\u2013 Concurrency Made Simple\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/category\\\/go-programming\\\/#listItem\",\"name\":\"Go Programming\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#organization\",\"name\":\"Go Programming Tutorial\",\"description\":\"Beginner to Expert Go Programming Tutorial\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/author\\\/kindsonthegenius-3\\\/#author\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/author\\\/kindsonthegenius-3\\\/\",\"name\":\"kindsonthegenius\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"kindsonthegenius\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#webpage\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/\",\"name\":\"Go Goroutines and Channels \\u2013 Concurrency Made Simple - Go Programming Tutorial\",\"description\":\"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \\u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/author\\\/kindsonthegenius-3\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/author\\\/kindsonthegenius-3\\\/#author\"},\"datePublished\":\"2026-07-07T20:35:03+00:00\",\"dateModified\":\"2026-07-07T20:38:35+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#website\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/\",\"name\":\"Go Programming Tutorial\",\"description\":\"Beginner to Expert Go Programming Tutorial\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Go Goroutines and Channels \u2013 Concurrency Made Simple - Go Programming Tutorial","description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how","canonical_url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#blogposting","name":"Go Goroutines and Channels \u2013 Concurrency Made Simple - Go Programming Tutorial","headline":"Go Goroutines and Channels \u2013 Concurrency Made Simple","author":{"@id":"https:\/\/kindsonthegenius.com\/go\/author\/kindsonthegenius-3\/#author"},"publisher":{"@id":"https:\/\/kindsonthegenius.com\/go\/#organization"},"datePublished":"2026-07-07T20:35:03+00:00","dateModified":"2026-07-07T20:38:35+00:00","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#webpage"},"isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#webpage"},"articleSection":"Go Programming"},{"@type":"BreadcrumbList","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go#listItem","position":1,"name":"Home","item":"https:\/\/kindsonthegenius.com\/go","nextItem":{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go\/category\/go-programming\/#listItem","name":"Go Programming"}},{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go\/category\/go-programming\/#listItem","position":2,"name":"Go Programming","item":"https:\/\/kindsonthegenius.com\/go\/category\/go-programming\/","nextItem":{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#listItem","name":"Go Goroutines and Channels \u2013 Concurrency Made Simple"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#listItem","position":3,"name":"Go Goroutines and Channels \u2013 Concurrency Made Simple","previousItem":{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go\/category\/go-programming\/#listItem","name":"Go Programming"}}]},{"@type":"Organization","@id":"https:\/\/kindsonthegenius.com\/go\/#organization","name":"Go Programming Tutorial","description":"Beginner to Expert Go Programming Tutorial","url":"https:\/\/kindsonthegenius.com\/go\/"},{"@type":"Person","@id":"https:\/\/kindsonthegenius.com\/go\/author\/kindsonthegenius-3\/#author","url":"https:\/\/kindsonthegenius.com\/go\/author\/kindsonthegenius-3\/","name":"kindsonthegenius","image":{"@type":"ImageObject","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g","width":96,"height":96,"caption":"kindsonthegenius"}},{"@type":"WebPage","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#webpage","url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","name":"Go Goroutines and Channels \u2013 Concurrency Made Simple - Go Programming Tutorial","description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/#website"},"breadcrumb":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#breadcrumblist"},"author":{"@id":"https:\/\/kindsonthegenius.com\/go\/author\/kindsonthegenius-3\/#author"},"creator":{"@id":"https:\/\/kindsonthegenius.com\/go\/author\/kindsonthegenius-3\/#author"},"datePublished":"2026-07-07T20:35:03+00:00","dateModified":"2026-07-07T20:38:35+00:00"},{"@type":"WebSite","@id":"https:\/\/kindsonthegenius.com\/go\/#website","url":"https:\/\/kindsonthegenius.com\/go\/","name":"Go Programming Tutorial","description":"Beginner to Expert Go Programming Tutorial","inLanguage":"en-US","publisher":{"@id":"https:\/\/kindsonthegenius.com\/go\/#organization"}}]},"og:locale":"en_US","og:site_name":"Go Programming Tutorial - Beginner to Expert Go Programming Tutorial","og:type":"article","og:title":"Go Goroutines and Channels \u2013 Concurrency Made Simple - Go Programming Tutorial","og:description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how","og:url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","article:published_time":"2026-07-07T20:35:03+00:00","article:modified_time":"2026-07-07T20:38:35+00:00","twitter:card":"summary_large_image","twitter:title":"Go Goroutines and Channels \u2013 Concurrency Made Simple - Go Programming Tutorial","twitter:description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover the Go goroutines tutorial fundamentals \u2014 lightweight concurrent functions, channels for safe communication, and the patterns that make Go a leading language for servers and cloud infrastructure. If you completed Go Interfaces and Errors, you understand how"},"aioseo_meta_data":[],"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kindsonthegenius.com\/go\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kindsonthegenius.com\/go\/category\/go-programming\/\" title=\"Go Programming\">Go Programming<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tGo Goroutines and Channels \u2013 Concurrency Made Simple\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/kindsonthegenius.com\/go"},{"label":"Go Programming","link":"https:\/\/kindsonthegenius.com\/go\/category\/go-programming\/"},{"label":"Go Goroutines and Channels \u2013 Concurrency Made Simple","link":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/"}],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Go Goroutines and Channels \u2013 Concurrency Made Simple | Go Programming Tutorial<\/title>\n<meta name=\"description\" content=\"Learn Go goroutines and channels for concurrent programming with select and waitgroups. Lesson 11 in the free Go tutorial with runnable examples.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go Goroutines and Channels \u2013 Concurrency Made Simple | Go Programming Tutorial\" \/>\n<meta property=\"og:description\" content=\"Learn Go goroutines and channels for concurrent programming with select and waitgroups. Lesson 11 in the free Go tutorial with runnable examples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/\" \/>\n<meta property=\"og:site_name\" content=\"Go Programming Tutorial\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-07T20:35:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-07T20:38:35+00:00\" \/>\n<meta name=\"author\" content=\"kindsonthegenius\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"kindsonthegenius\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/\"},\"author\":{\"name\":\"kindsonthegenius\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#\\\/schema\\\/person\\\/1b5971e6d80495780d9857f155fd1b21\"},\"headline\":\"Go Goroutines and Channels \u2013 Concurrency Made Simple\",\"datePublished\":\"2026-07-07T20:35:03+00:00\",\"dateModified\":\"2026-07-07T20:38:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/\"},\"wordCount\":792,\"commentCount\":1,\"articleSection\":[\"Go Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/\",\"name\":\"Go Goroutines and Channels \u2013 Concurrency Made Simple | Go Programming Tutorial\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#website\"},\"datePublished\":\"2026-07-07T20:35:03+00:00\",\"dateModified\":\"2026-07-07T20:38:35+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#\\\/schema\\\/person\\\/1b5971e6d80495780d9857f155fd1b21\"},\"description\":\"Learn Go goroutines and channels for concurrent programming with select and waitgroups. Lesson 11 in the free Go tutorial with runnable examples.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/11-go-goroutines-and-channels\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go Goroutines and Channels \u2013 Concurrency Made Simple\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#website\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/\",\"name\":\"Go Programming Tutorial\",\"description\":\"Beginner to Expert Go Programming Tutorial\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#\\\/schema\\\/person\\\/1b5971e6d80495780d9857f155fd1b21\",\"name\":\"kindsonthegenius\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g\",\"caption\":\"kindsonthegenius\"},\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/author\\\/kindsonthegenius-3\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Go Goroutines and Channels \u2013 Concurrency Made Simple | Go Programming Tutorial","description":"Learn Go goroutines and channels for concurrent programming with select and waitgroups. Lesson 11 in the free Go tutorial with runnable examples.","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:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","og_locale":"en_US","og_type":"article","og_title":"Go Goroutines and Channels \u2013 Concurrency Made Simple | Go Programming Tutorial","og_description":"Learn Go goroutines and channels for concurrent programming with select and waitgroups. Lesson 11 in the free Go tutorial with runnable examples.","og_url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","og_site_name":"Go Programming Tutorial","article_published_time":"2026-07-07T20:35:03+00:00","article_modified_time":"2026-07-07T20:38:35+00:00","author":"kindsonthegenius","twitter_card":"summary_large_image","twitter_misc":{"Written by":"kindsonthegenius","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#article","isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/"},"author":{"name":"kindsonthegenius","@id":"https:\/\/kindsonthegenius.com\/go\/#\/schema\/person\/1b5971e6d80495780d9857f155fd1b21"},"headline":"Go Goroutines and Channels \u2013 Concurrency Made Simple","datePublished":"2026-07-07T20:35:03+00:00","dateModified":"2026-07-07T20:38:35+00:00","mainEntityOfPage":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/"},"wordCount":792,"commentCount":1,"articleSection":["Go Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/","name":"Go Goroutines and Channels \u2013 Concurrency Made Simple | Go Programming Tutorial","isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/#website"},"datePublished":"2026-07-07T20:35:03+00:00","dateModified":"2026-07-07T20:38:35+00:00","author":{"@id":"https:\/\/kindsonthegenius.com\/go\/#\/schema\/person\/1b5971e6d80495780d9857f155fd1b21"},"description":"Learn Go goroutines and channels for concurrent programming with select and waitgroups. Lesson 11 in the free Go tutorial with runnable examples.","breadcrumb":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kindsonthegenius.com\/go\/"},{"@type":"ListItem","position":2,"name":"Go Goroutines and Channels \u2013 Concurrency Made Simple"}]},{"@type":"WebSite","@id":"https:\/\/kindsonthegenius.com\/go\/#website","url":"https:\/\/kindsonthegenius.com\/go\/","name":"Go Programming Tutorial","description":"Beginner to Expert Go Programming Tutorial","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kindsonthegenius.com\/go\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/kindsonthegenius.com\/go\/#\/schema\/person\/1b5971e6d80495780d9857f155fd1b21","name":"kindsonthegenius","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b9d710de456c3d85e5614c3a6992fa3d527425e2ab32b8bd5d85bfbaa235004b?s=96&d=mm&r=g","caption":"kindsonthegenius"},"url":"https:\/\/kindsonthegenius.com\/go\/author\/kindsonthegenius-3\/"}]}},"_links":{"self":[{"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/posts\/180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/comments?post=180"}],"version-history":[{"count":3,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/posts\/180\/revisions"}],"predecessor-version":[{"id":196,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/posts\/180\/revisions\/196"}],"wp:attachment":[{"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/media?parent=180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/categories?post=180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/tags?post=180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}