{"id":177,"date":"2026-07-07T20:34:49","date_gmt":"2026-07-07T20:34:49","guid":{"rendered":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/"},"modified":"2026-07-07T20:38:30","modified_gmt":"2026-07-07T20:38:30","slug":"10-go-interfaces-and-errors","status":"publish","type":"post","link":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/","title":{"rendered":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling"},"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 <strong>Go interfaces and errors<\/strong> \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no <code>implements<\/code> keyword. The <code>error<\/code> type is a built-in interface that every Go developer uses daily. This lesson focuses especially on <strong>Go error handling<\/strong> \u2014 the idiomatic patterns that replace exceptions in other languages.<\/p>\n<p><strong>Prerequisites:<\/strong> Lessons 1\u20139 completed, Go 1.22 or newer installed. <strong>Estimated time:<\/strong> 50\u201360 minutes.<\/p>\n<h4 id=\"error-basics\">1. The error Type and Basic Handling<\/h4>\n<p>In Go, functions signal failure by returning an <code>error<\/code> as the last return value. The <code>error<\/code> interface is minimal \u2014 any type with an <code>Error() string<\/code> method satisfies it:<\/p>\n<pre><code class=\"language-go\">type error interface {\n\tError() string\n}\n<\/code><\/pre>\n<p>The standard pattern is to check the error immediately after the call:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nfunc main() {\n\tdata, err := os.ReadFile(\"config.json\")\n\tif err != nil {\n\t\tfmt.Println(\"failed to read config:\", err)\n\t\treturn\n\t}\n\tfmt.Printf(\"read %d bytes\\n\", len(data))\n}\n<\/code><\/pre>\n<p>There are no try\/catch blocks. Errors are <strong>explicit values<\/strong> that flow through your program. This verbosity is intentional \u2014 it forces you to decide what to do at each failure point: retry, log, return upstream, or abort.<\/p>\n<h4 id=\"creating-errors\">2. Creating and Returning Errors<\/h4>\n<p>Use <code>errors.New<\/code> for simple messages and <code>fmt.Errorf<\/code> for formatted messages. Return <code>nil<\/code> when there is no error:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\nvar ErrNotFound = errors.New(\"book not found\")\n\nfunc findBook(id int) (string, error) {\n\tbooks := map[int]string{1: \"The Go Programming Language\", 2: \"Concurrency in Go\"}\n\ttitle, ok := books[id]\n\tif !ok {\n\t\treturn \"\", ErrNotFound\n\t}\n\treturn title, nil\n}\n\nfunc divide(a, b float64) (float64, error) {\n\tif b == 0 {\n\t\treturn 0, fmt.Errorf(\"divide: cannot divide %g by zero\", a)\n\t}\n\treturn a \/ b, nil\n}\n\nfunc main() {\n\ttitle, err := findBook(99)\n\tif err != nil {\n\t\tfmt.Println(err) \/\/ book not found\n\t\treturn\n\t}\n\tfmt.Println(title)\n}\n<\/code><\/pre>\n<p>Export sentinel errors like <code>ErrNotFound<\/code> (uppercase) so callers can compare them with <code>errors.Is<\/code>. Keep error messages lowercase and without trailing punctuation \u2014 they are often wrapped and concatenated.<\/p>\n<h4 id=\"error-wrapping\">3. Wrapping Errors with %w<\/h4>\n<p>When a lower-level error bubbles up through your code, <strong>wrap<\/strong> it with context using <code>fmt.Errorf<\/code> and the <code>%w<\/code> verb. Wrapping preserves the original error for inspection while adding a human-readable layer:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n)\n\nfunc loadConfig(path string) error {\n\t_, err := os.ReadFile(path)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"loadConfig(%q): %w\", path, err)\n\t}\n\treturn nil\n}\n\nfunc main() {\n\terr := loadConfig(\"\/etc\/app\/config.json\")\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\t\/\/ loadConfig(\"\/etc\/app\/config.json\"): open \/etc\/app\/config.json: no such file or directory\n\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\tfmt.Println(\"\u2192 config file is missing \u2014 create one or check the path\")\n\t\t}\n\t}\n}\n<\/code><\/pre>\n<p><code>errors.Is(err, target)<\/code> walks the unwrap chain to find a matching error. <code>errors.As(err, &amp;target)<\/code> extracts a specific error type from the chain. These functions replaced fragile string matching and are essential in modern Go error handling.<\/p>\n<h4 id=\"interfaces-intro\">4. Interfaces \u2014 Implicit Satisfaction<\/h4>\n<p>An <strong>interface<\/strong> defines a set of method signatures. A type satisfies an interface by implementing those methods \u2014 no declaration required. The empty interface <code>interface{}<\/code> (or <code>any<\/code> since Go 1.18) is satisfied by every type.<\/p>\n<pre><code class=\"language-go\">package main\n\nimport \"fmt\"\n\ntype Speaker interface {\n\tSpeak() string\n}\n\ntype Dog struct{ Name string }\ntype Cat struct{ Name string }\n\nfunc (d Dog) Speak() string  { return d.Name + \" says Woof!\" }\nfunc (c Cat) Speak() string  { return c.Name + \" says Meow!\" }\n\nfunc announce(s Speaker) {\n\tfmt.Println(s.Speak())\n}\n\nfunc main() {\n\tannounce(Dog{Name: \"Rex\"})\n\tannounce(Cat{Name: \"Luna\"})\n}\n<\/code><\/pre>\n<p>Interfaces enable polymorphism and dependency injection. The <code>announce<\/code> function accepts any <code>Speaker<\/code> \u2014 it does not care whether the concrete type is a <code>Dog<\/code> or <code>Cat<\/code>. Small interfaces (one or two methods) are preferred \u2014 &#8220;the bigger the interface, the weaker the abstraction.&#8221;<\/p>\n<h4 id=\"io-reader-writer\">5. Standard Library Interfaces \u2014 io.Reader and io.Writer<\/h4>\n<p>The most important interfaces in Go live in the <code>io<\/code> package. <code>io.Reader<\/code> and <code>io.Writer<\/code> abstract reading and writing from files, network connections, buffers, and more:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\nfunc copyAndUppercase(w io.Writer, r io.Reader) error {\n\tdata, err := io.ReadAll(r)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"copyAndUppercase: read: %w\", err)\n\t}\n\t_, err = w.Write([]byte(strings.ToUpper(string(data))))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"copyAndUppercase: write: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc main() {\n\tvar buf strings.Builder\n\tinput := strings.NewReader(\"hello, interfaces\")\n\tif err := copyAndUppercase(&amp;buf, input); err != nil {\n\t\tfmt.Println(\"error:\", err)\n\t\treturn\n\t}\n\tfmt.Println(buf.String()) \/\/ HELLO, INTERFACES\n}\n<\/code><\/pre>\n<p>Design your own packages around small interfaces. Accept <code>io.Reader<\/code> instead of a file path when possible \u2014 callers can pass strings, HTTP bodies, or compressed streams without changing your function.<\/p>\n<h4 id=\"custom-error-types\">6. Custom Error Types<\/h4>\n<p>For errors that carry structured data \u2014 HTTP status codes, field names, retry hints \u2014 define a custom type with an <code>Error()<\/code> method:<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype ValidationError struct {\n\tField   string\n\tMessage string\n}\n\nfunc (e *ValidationError) Error() string {\n\treturn fmt.Sprintf(\"validation failed on %q: %s\", e.Field, e.Message)\n}\n\nfunc validateEmail(email string) error {\n\tif email == \"\" {\n\t\treturn &amp;ValidationError{Field: \"email\", Message: \"required\"}\n\t}\n\tif !strings.Contains(email, \"@\") {\n\t\treturn &amp;ValidationError{Field: \"email\", Message: \"must contain @\"}\n\t}\n\treturn nil\n}\n\nfunc main() {\n\terr := validateEmail(\"\")\n\tvar ve *ValidationError\n\tif errors.As(err, &amp;ve) {\n\t\tfmt.Printf(\"field=%s message=%s\\n\", ve.Field, ve.Message)\n\t}\n}\n<\/code><\/pre>\n<p>Use <code>errors.As<\/code> to extract <code>*ValidationError<\/code> from a wrapped error chain. This pattern powers HTTP handlers that map validation failures to 400 responses and database errors to 500 responses \u2014 exactly what you will build in the Lesson 12 REST API capstone.<\/p>\n<h4 id=\"panic-recover\">7. panic, recover, and When Not to Use Them<\/h4>\n<p><code>panic<\/code> stops normal execution and unwinds the stack. Use it for truly unrecoverable programmer errors \u2014 not for expected failures like a missing file or invalid user input. Those belong in <code>error<\/code> returns.<\/p>\n<pre><code class=\"language-go\">package main\n\nimport \"fmt\"\n\nfunc safeDivide(a, b int) (result int, err error) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\terr = fmt.Errorf(\"recovered from panic: %v\", r)\n\t\t}\n\t}()\n\treturn a \/ b, nil \/\/ panics if b == 0\n}\n\nfunc main() {\n\tresult, err := safeDivide(10, 0)\n\tif err != nil {\n\t\tfmt.Println(err) \/\/ recovered from panic: runtime error: integer divide by zero\n\t\treturn\n\t}\n\tfmt.Println(result)\n}\n<\/code><\/pre>\n<p><code>recover()<\/code> only works inside deferred functions. HTTP servers use it in middleware to catch panics and return 500 instead of crashing the process. For application logic, prefer explicit error returns \u2014 they are easier to test and reason about.<\/p>\n<h4 id=\"next\">8. Next Steps<\/h4>\n<p>You now understand <strong>Go interfaces and errors<\/strong> \u2014 the <code>error<\/code> interface, wrapping with <code>%w<\/code>, <code>errors.Is<\/code> and <code>errors.As<\/code>, implicit interface satisfaction, and when to use panic. In the next lesson we explore <strong>goroutines and channels<\/strong> \u2014 Go&#8217;s built-in concurrency model that makes it a top choice for networked services.<\/p>\n<p>Continue the series: <a href=\"https:\/\/www.kindsonthegenius.com\/go\/09-go-pointers\/\">Lesson 9 \u2013 Pointers<\/a> \u00b7 <a href=\"https:\/\/www.kindsonthegenius.com\/go\/11-go-goroutines-and-channels\/\">Lesson 11 \u2013 Goroutines and Channels<\/a><\/p>\n<h4 id=\"faq\">Frequently Asked Questions<\/h4>\n<p><strong>Why does Go not have exceptions?<\/strong><br \/>\nGo treats errors as values returned from functions. This makes failure paths explicit and visible at every call site, which improves reliability in large codebases and concurrent programs.<\/p>\n<p><strong>What is the difference between errors.Is and errors.As?<\/strong><br \/>\n<code>errors.Is<\/code> checks whether any error in the unwrap chain equals a target sentinel error. <code>errors.As<\/code> extracts a specific error <em>type<\/em> from the chain into a variable you provide.<\/p>\n<p><strong>How do interfaces work in Go?<\/strong><br \/>\nA type satisfies an interface by implementing its methods \u2014 no <code>implements<\/code> keyword needed. Interfaces are satisfied implicitly, enabling flexible, decoupled designs.<\/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\/09-go-pointers\/\">Lesson 9: Go Pointers \u2013 Addresses, Dereferencing, and When to Use Them<\/a><\/p>\n<p><strong>Next:<\/strong> <a href=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/11-go-goroutines-and-channels\/\">Lesson 11: Go Goroutines and Channels \u2013 Concurrency Made Simple<\/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\":\"How does error handling work in Go?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Functions return an error as the last value. Callers check if err != nil before proceeding.\"}},{\"@type\":\"Question\",\"name\":\"What is an interface in Go?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"An interface defines method signatures. Types satisfy interfaces implicitly by implementing methods.\"}},{\"@type\":\"Question\",\"name\":\"What is the empty interface in Go?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"interface{} (or any in Go 1.18+) accepts any type. Use sparingly; prefer concrete types.\"}}]}<\/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 Go interfaces and errors \u2014 two features &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-177","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 Go interfaces and errors \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a\" \/>\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\/10-go-interfaces-and-errors\/\" \/>\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 Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling - 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 Go interfaces and errors \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-07T20:34:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-07T20:38:30+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling - 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 Go interfaces and errors \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a\" \/>\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\\\/10-go-interfaces-and-errors\\\/#blogposting\",\"name\":\"Go Interfaces and Errors \\u2013 Polymorphism and Idiomatic Error Handling - Go Programming Tutorial\",\"headline\":\"Go Interfaces and Errors \\u2013 Polymorphism and Idiomatic Error Handling\",\"author\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/author\\\/kindsonthegenius-3\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#organization\"},\"datePublished\":\"2026-07-07T20:34:49+00:00\",\"dateModified\":\"2026-07-07T20:38:30+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#webpage\"},\"articleSection\":\"Go Programming\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#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\\\/10-go-interfaces-and-errors\\\/#listItem\",\"name\":\"Go Interfaces and Errors \\u2013 Polymorphism and Idiomatic Error Handling\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#listItem\",\"position\":3,\"name\":\"Go Interfaces and Errors \\u2013 Polymorphism and Idiomatic Error Handling\",\"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\\\/10-go-interfaces-and-errors\\\/#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\\\/10-go-interfaces-and-errors\\\/#webpage\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/\",\"name\":\"Go Interfaces and Errors \\u2013 Polymorphism and Idiomatic Error Handling - Go Programming Tutorial\",\"description\":\"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover Go interfaces and errors \\u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#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:34:49+00:00\",\"dateModified\":\"2026-07-07T20:38:30+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 Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling - Go Programming Tutorial","description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover Go interfaces and errors \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a","canonical_url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#blogposting","name":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling - Go Programming Tutorial","headline":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling","author":{"@id":"https:\/\/kindsonthegenius.com\/go\/author\/kindsonthegenius-3\/#author"},"publisher":{"@id":"https:\/\/kindsonthegenius.com\/go\/#organization"},"datePublished":"2026-07-07T20:34:49+00:00","dateModified":"2026-07-07T20:38:30+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#webpage"},"isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#webpage"},"articleSection":"Go Programming"},{"@type":"BreadcrumbList","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#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\/10-go-interfaces-and-errors\/#listItem","name":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#listItem","position":3,"name":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling","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\/10-go-interfaces-and-errors\/#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\/10-go-interfaces-and-errors\/#webpage","url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/","name":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling - Go Programming Tutorial","description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover Go interfaces and errors \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/#website"},"breadcrumb":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#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:34:49+00:00","dateModified":"2026-07-07T20:38:30+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 Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling - Go Programming Tutorial","og:description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover Go interfaces and errors \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a","og:url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/","article:published_time":"2026-07-07T20:34:49+00:00","article:modified_time":"2026-07-07T20:38:30+00:00","twitter:card":"summary_large_image","twitter:title":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling - Go Programming Tutorial","twitter:description":"Updated July 2, 2026. Refreshed for Go 1.22+ and current SEO best practices. In this lesson we cover Go interfaces and errors \u2014 two features that shape how production Go code is structured. Interfaces provide implicit polymorphism: a type satisfies an interface by implementing its methods, with no implements keyword. The error type is a"},"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 Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling\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 Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling","link":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/"}],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling | Go Programming Tutorial<\/title>\n<meta name=\"description\" content=\"Learn Go interfaces and error handling \u2014 error values, fmt.Errorf, and type assertions. Lesson 10 in the free Go programming tutorial series.\" \/>\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\/10-go-interfaces-and-errors\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling | Go Programming Tutorial\" \/>\n<meta property=\"og:description\" content=\"Learn Go interfaces and error handling \u2014 error values, fmt.Errorf, and type assertions. Lesson 10 in the free Go programming tutorial series.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/\" \/>\n<meta property=\"og:site_name\" content=\"Go Programming Tutorial\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-07T20:34:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-07T20:38:30+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\\\/10-go-interfaces-and-errors\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/\"},\"author\":{\"name\":\"kindsonthegenius\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#\\\/schema\\\/person\\\/1b5971e6d80495780d9857f155fd1b21\"},\"headline\":\"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling\",\"datePublished\":\"2026-07-07T20:34:49+00:00\",\"dateModified\":\"2026-07-07T20:38:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/\"},\"wordCount\":728,\"commentCount\":0,\"articleSection\":[\"Go Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/\",\"url\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/\",\"name\":\"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling | Go Programming Tutorial\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#website\"},\"datePublished\":\"2026-07-07T20:34:49+00:00\",\"dateModified\":\"2026-07-07T20:38:30+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/#\\\/schema\\\/person\\\/1b5971e6d80495780d9857f155fd1b21\"},\"description\":\"Learn Go interfaces and error handling \u2014 error values, fmt.Errorf, and type assertions. Lesson 10 in the free Go programming tutorial series.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/2026\\\/07\\\/07\\\/10-go-interfaces-and-errors\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kindsonthegenius.com\\\/go\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling\"}]},{\"@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 Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling | Go Programming Tutorial","description":"Learn Go interfaces and error handling \u2014 error values, fmt.Errorf, and type assertions. Lesson 10 in the free Go programming tutorial series.","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\/10-go-interfaces-and-errors\/","og_locale":"en_US","og_type":"article","og_title":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling | Go Programming Tutorial","og_description":"Learn Go interfaces and error handling \u2014 error values, fmt.Errorf, and type assertions. Lesson 10 in the free Go programming tutorial series.","og_url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/","og_site_name":"Go Programming Tutorial","article_published_time":"2026-07-07T20:34:49+00:00","article_modified_time":"2026-07-07T20:38:30+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\/10-go-interfaces-and-errors\/#article","isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/"},"author":{"name":"kindsonthegenius","@id":"https:\/\/kindsonthegenius.com\/go\/#\/schema\/person\/1b5971e6d80495780d9857f155fd1b21"},"headline":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling","datePublished":"2026-07-07T20:34:49+00:00","dateModified":"2026-07-07T20:38:30+00:00","mainEntityOfPage":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/"},"wordCount":728,"commentCount":0,"articleSection":["Go Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/","url":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/","name":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling | Go Programming Tutorial","isPartOf":{"@id":"https:\/\/kindsonthegenius.com\/go\/#website"},"datePublished":"2026-07-07T20:34:49+00:00","dateModified":"2026-07-07T20:38:30+00:00","author":{"@id":"https:\/\/kindsonthegenius.com\/go\/#\/schema\/person\/1b5971e6d80495780d9857f155fd1b21"},"description":"Learn Go interfaces and error handling \u2014 error values, fmt.Errorf, and type assertions. Lesson 10 in the free Go programming tutorial series.","breadcrumb":{"@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/kindsonthegenius.com\/go\/2026\/07\/07\/10-go-interfaces-and-errors\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kindsonthegenius.com\/go\/"},{"@type":"ListItem","position":2,"name":"Go Interfaces and Errors \u2013 Polymorphism and Idiomatic Error Handling"}]},{"@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\/177","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=177"}],"version-history":[{"count":3,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":195,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/posts\/177\/revisions\/195"}],"wp:attachment":[{"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/media?parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/categories?post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kindsonthegenius.com\/go\/wp-json\/wp\/v2\/tags?post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}