{"id":23452,"date":"2024-03-16T01:26:57","date_gmt":"2024-03-16T01:26:57","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/"},"modified":"2024-03-22T01:18:18","modified_gmt":"2024-03-22T01:18:18","slug":"how-is-polymorphism-implemented-in-golang-interfaces","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/","title":{"rendered":"How is polymorphism implemented in Golang interfaces?"},"content":{"rendered":"<p>In the Go language, interfaces allow for polymorphism, where different types can exhibit the same behavior.<\/p>\n<p>To achieve polymorphism, you need to define an interface and implement it in different types. Then you can invoke the methods of the interface by using variables of the interface type, thus achieving polymorphism.<\/p>\n<p>Here is a way to achieve polymorphism:<\/p>\n<ol>\n<li>Define an interface: First, it is necessary to define an interface and declare the methods that need to be implemented within the interface.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">type<\/span> Shape <span class=\"hljs-keyword\">interface<\/span> {\r\n    Area() <span class=\"hljs-type\">float64<\/span>\r\n    Perimeter() <span class=\"hljs-type\">float64<\/span>\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Implement the interface: Implement the interface in different types and provide specific implementations for the methods.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">type<\/span> Rect <span class=\"hljs-keyword\">struct<\/span> {\r\n    width  <span class=\"hljs-type\">float64<\/span>\r\n    height <span class=\"hljs-type\">float64<\/span>\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(r Rect)<\/span><\/span> Area() <span class=\"hljs-type\">float64<\/span> {\r\n    <span class=\"hljs-keyword\">return<\/span> r.width * r.height\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(r Rect)<\/span><\/span> Perimeter() <span class=\"hljs-type\">float64<\/span> {\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">2<\/span> * (r.width + r.height)\r\n}\r\n\r\n<span class=\"hljs-keyword\">type<\/span> Circle <span class=\"hljs-keyword\">struct<\/span> {\r\n    radius <span class=\"hljs-type\">float64<\/span>\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(c Circle)<\/span><\/span> Area() <span class=\"hljs-type\">float64<\/span> {\r\n    <span class=\"hljs-keyword\">return<\/span> math.Pi * c.radius * c.radius\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(c Circle)<\/span><\/span> Perimeter() <span class=\"hljs-type\">float64<\/span> {\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">2<\/span> * math.Pi * c.radius\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Utilizing polymorphism: calling methods that implemented an interface through variables of interface type.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">printShapeInfo<\/span><span class=\"hljs-params\">(s Shape)<\/span><\/span> {\r\n    fmt.Println(<span class=\"hljs-string\">\"Area:\"<\/span>, s.Area())\r\n    fmt.Println(<span class=\"hljs-string\">\"Perimeter:\"<\/span>, s.Perimeter())\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span><\/span> {\r\n    rect := Rect{width: <span class=\"hljs-number\">5<\/span>, height: <span class=\"hljs-number\">3<\/span>}\r\n    circle := Circle{radius: <span class=\"hljs-number\">2<\/span>}\r\n\r\n    printShapeInfo(rect)\r\n    printShapeInfo(circle)\r\n}\r\n<\/code><\/pre>\n<p>In the example above, the Shape interface defines two methods, Area() and Perimeter(). Then, the Rect and Circle structures each implement the Shape interface and provide the specific implementations of these two methods.<\/p>\n<p>In the main function, we created a variable of type Rect named rect and a variable of type Circle named circle. We then called the printShapeInfo function, passing in rect and circle to achieve polymorphism. The parameter type in the printShapeInfo function is the Shape interface, so it can accept any type that implements the Shape interface and call the corresponding methods.<\/p>\n<p>In the end, the output shows the combined area and perimeter of Rect and Circle. This demonstrates polymorphism being achieved through interfaces, where different types of variables can exhibit similar behavior.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Go language, interfaces allow for polymorphism, where different types can exhibit the same behavior. To achieve polymorphism, you need to define an interface and implement it in different types. Then you can invoke the methods of the interface by using variables of the interface type, thus achieving polymorphism. Here is a way to [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-23452","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How is polymorphism implemented in Golang interfaces? - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How is polymorphism implemented in Golang interfaces?\" \/>\n<meta property=\"og:description\" content=\"In the Go language, interfaces allow for polymorphism, where different types can exhibit the same behavior. To achieve polymorphism, you need to define an interface and implement it in different types. Then you can invoke the methods of the interface by using variables of the interface type, thus achieving polymorphism. Here is a way to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-16T01:26:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-22T01:18:18+00:00\" \/>\n<meta name=\"author\" content=\"Olivia Parker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Olivia Parker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/\"},\"author\":{\"name\":\"Olivia Parker\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\"},\"headline\":\"How is polymorphism implemented in Golang interfaces?\",\"datePublished\":\"2024-03-16T01:26:57+00:00\",\"dateModified\":\"2024-03-22T01:18:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/\"},\"wordCount\":242,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/\",\"name\":\"How is polymorphism implemented in Golang interfaces? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-16T01:26:57+00:00\",\"dateModified\":\"2024-03-22T01:18:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How is polymorphism implemented in Golang interfaces?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\",\"name\":\"Olivia Parker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"caption\":\"Olivia Parker\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How is polymorphism implemented in Golang interfaces? - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/","og_locale":"en_US","og_type":"article","og_title":"How is polymorphism implemented in Golang interfaces?","og_description":"In the Go language, interfaces allow for polymorphism, where different types can exhibit the same behavior. To achieve polymorphism, you need to define an interface and implement it in different types. Then you can invoke the methods of the interface by using variables of the interface type, thus achieving polymorphism. Here is a way to [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-16T01:26:57+00:00","article_modified_time":"2024-03-22T01:18:18+00:00","author":"Olivia Parker","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Olivia Parker","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/"},"author":{"name":"Olivia Parker","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9"},"headline":"How is polymorphism implemented in Golang interfaces?","datePublished":"2024-03-16T01:26:57+00:00","dateModified":"2024-03-22T01:18:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/"},"wordCount":242,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/","url":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/","name":"How is polymorphism implemented in Golang interfaces? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-16T01:26:57+00:00","dateModified":"2024-03-22T01:18:18+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-is-polymorphism-implemented-in-golang-interfaces\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How is polymorphism implemented in Golang interfaces?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9","name":"Olivia Parker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","caption":"Olivia Parker"},"url":"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/23452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=23452"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/23452\/revisions"}],"predecessor-version":[{"id":57429,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/23452\/revisions\/57429"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=23452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=23452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=23452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}