{"id":15686,"date":"2024-03-15T11:34:48","date_gmt":"2024-03-15T11:34:48","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/"},"modified":"2025-08-06T20:42:21","modified_gmt":"2025-08-06T20:42:21","slug":"how-to-implement-the-decorator-pattern-in-golang","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/","title":{"rendered":"How to implement the decorator pattern in Golang?"},"content":{"rendered":"<p>In the Go language, the feature of using functions as parameters and return values can be used to implement the decorator pattern.<\/p>\n<p>Here is an example code demonstrating how to use the decorator pattern to add functionality to a function.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">package<\/span> main\r\n\r\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"fmt\"<\/span>\r\n\r\n<span class=\"hljs-comment\">\/\/ \u5b9a\u4e49\u4e00\u4e2a\u539f\u59cb\u7684\u51fd\u6570\u7c7b\u578b<\/span>\r\n<span class=\"hljs-keyword\">type<\/span> FooFunc <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">()<\/span><\/span>\r\n\r\n<span class=\"hljs-comment\">\/\/ \u539f\u59cb\u7684\u51fd\u6570<\/span>\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">Foo<\/span><span class=\"hljs-params\">()<\/span><\/span> {\r\n    fmt.Println(<span class=\"hljs-string\">\"This is the original function.\"<\/span>)\r\n}\r\n\r\n<span class=\"hljs-comment\">\/\/ \u88c5\u9970\u5668\u51fd\u6570\u7c7b\u578b<\/span>\r\n<span class=\"hljs-keyword\">type<\/span> DecoratorFunc <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(FooFunc)<\/span><\/span> FooFunc\r\n\r\n<span class=\"hljs-comment\">\/\/ \u88c5\u9970\u5668\u51fd\u6570\uff0c\u7528\u4e8e\u5728\u539f\u59cb\u51fd\u6570\u6267\u884c\u524d\u540e\u589e\u52a0\u989d\u5916\u7684\u529f\u80fd<\/span>\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">Decorator<\/span><span class=\"hljs-params\">(f FooFunc)<\/span><\/span> FooFunc {\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">()<\/span><\/span> {\r\n        fmt.Println(<span class=\"hljs-string\">\"Before calling the original function.\"<\/span>)\r\n        f() <span class=\"hljs-comment\">\/\/ \u8c03\u7528\u539f\u59cb\u51fd\u6570<\/span>\r\n        fmt.Println(<span class=\"hljs-string\">\"After calling the original function.\"<\/span>)\r\n    }\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    <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u4e00\u4e2a\u88c5\u9970\u5668\u51fd\u6570<\/span>\r\n    decoratedFoo := Decorator(Foo)\r\n    \r\n    <span class=\"hljs-comment\">\/\/ \u8c03\u7528\u88c5\u9970\u540e\u7684\u51fd\u6570<\/span>\r\n    decoratedFoo()\r\n}\r\n<\/code><\/pre>\n<p>When running the code above, the output will be:<\/p>\n<pre class=\"post-pre\"><code>Before calling the original function.\r\nThis is the original function.\r\nAfter calling the original function.\r\n<\/code><\/pre>\n<p>In this example code, Foo is a raw function, and Decorator is a decorator function. The decorator function takes a function type as a parameter and returns a function with the same function type.<\/p>\n<p>Decorator functions can add additional functionality code before and after calling the original function. In this example, the decorator function prints the message &#8220;Before calling the original function.&#8221; before calling the original function and &#8220;After calling the original function.&#8221; after calling it.<\/p>\n<p>By using the decorator pattern, we can dynamically add extra functionality without modifying the original function code.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Go language, the feature of using functions as parameters and return values can be used to implement the decorator pattern. Here is an example code demonstrating how to use the decorator pattern to add functionality to a function. package main import &#8220;fmt&#8221; \/\/ \u5b9a\u4e49\u4e00\u4e2a\u539f\u59cb\u7684\u51fd\u6570\u7c7b\u578b type FooFunc func() \/\/ \u539f\u59cb\u7684\u51fd\u6570 func Foo() { fmt.Println(&#8220;This [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[453,1402,299,1404,1403],"class_list":["post-15686","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-development","tag-guide","tag-programming","tag-technology","tag-tutorial"],"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 to implement the decorator pattern in Golang? - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn about how to implement the decorator pattern in golang?. Comprehensive guide with examples and best practices.\" \/>\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-to-implement-the-decorator-pattern-in-golang\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to implement the decorator pattern in Golang?\" \/>\n<meta property=\"og:description\" content=\"Learn about how to implement the decorator pattern in golang?. Comprehensive guide with examples and best practices.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/\" \/>\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-15T11:34:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-06T20:42:21+00:00\" \/>\n<meta name=\"author\" content=\"Sophia Anderson\" \/>\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=\"Sophia Anderson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/\"},\"author\":{\"name\":\"Sophia Anderson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30\"},\"headline\":\"How to implement the decorator pattern in Golang?\",\"datePublished\":\"2024-03-15T11:34:48+00:00\",\"dateModified\":\"2025-08-06T20:42:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/\"},\"wordCount\":150,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"Development\",\"guide\",\"programming\",\"technology\",\"tutorial\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/\",\"name\":\"How to implement the decorator pattern in Golang? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T11:34:48+00:00\",\"dateModified\":\"2025-08-06T20:42:21+00:00\",\"description\":\"Learn about how to implement the decorator pattern in golang?. Comprehensive guide with examples and best practices.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to implement the decorator pattern in Golang?\"}]},{\"@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\/19a24313de9c988db3d69226b4a40a30\",\"name\":\"Sophia Anderson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g\",\"caption\":\"Sophia Anderson\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/sophiaanderson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to implement the decorator pattern in Golang? - Blog - Silicon Cloud","description":"Learn about how to implement the decorator pattern in golang?. Comprehensive guide with examples and best practices.","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-to-implement-the-decorator-pattern-in-golang\/","og_locale":"en_US","og_type":"article","og_title":"How to implement the decorator pattern in Golang?","og_description":"Learn about how to implement the decorator pattern in golang?. Comprehensive guide with examples and best practices.","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T11:34:48+00:00","article_modified_time":"2025-08-06T20:42:21+00:00","author":"Sophia Anderson","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Sophia Anderson","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/"},"author":{"name":"Sophia Anderson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30"},"headline":"How to implement the decorator pattern in Golang?","datePublished":"2024-03-15T11:34:48+00:00","dateModified":"2025-08-06T20:42:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/"},"wordCount":150,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["Development","guide","programming","technology","tutorial"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/","name":"How to implement the decorator pattern in Golang? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T11:34:48+00:00","dateModified":"2025-08-06T20:42:21+00:00","description":"Learn about how to implement the decorator pattern in golang?. Comprehensive guide with examples and best practices.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-the-decorator-pattern-in-golang\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to implement the decorator pattern in Golang?"}]},{"@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\/19a24313de9c988db3d69226b4a40a30","name":"Sophia Anderson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g","caption":"Sophia Anderson"},"url":"https:\/\/www.silicloud.com\/blog\/author\/sophiaanderson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/15686","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\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=15686"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/15686\/revisions"}],"predecessor-version":[{"id":49209,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/15686\/revisions\/49209"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=15686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=15686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=15686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}