{"id":18540,"date":"2024-03-15T17:08:55","date_gmt":"2024-03-15T17:08:55","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/"},"modified":"2024-03-21T13:33:06","modified_gmt":"2024-03-21T13:33:06","slug":"what-is-the-implementation-method-of-dependency-injection-in-golang","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/","title":{"rendered":"What is the implementation method of dependency injection in Golang?"},"content":{"rendered":"<p>There are several methods for implementing dependency injection in Golang.<\/p>\n<ol>\n<li>Constructor injection: by defining a constructor in the struct with dependent parameters, the dependencies are passed when creating an instance of the struct. This approach requires manually creating struct instances and passing in dependencies, which makes it easy to use mock dependencies in unit tests.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">type<\/span> Foo <span class=\"hljs-keyword\">struct<\/span> {\r\n    Dependency *Dependency\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">NewFoo<\/span><span class=\"hljs-params\">(dependency *Dependency)<\/span><\/span> *Foo {\r\n    <span class=\"hljs-keyword\">return<\/span> &amp;Foo{\r\n        Dependency: dependency,\r\n    }\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Property injection: By defining a public dependency property within a struct and manually setting the dependency when using the struct, this method requires manual setting of dependencies after creating a struct instance, which may not be ideal for using virtual dependencies in unit testing.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">type<\/span> Foo <span class=\"hljs-keyword\">struct<\/span> {\r\n    Dependency *Dependency\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(f *Foo)<\/span><\/span> SetDependency(dependency *Dependency) {\r\n    f.Dependency = dependency\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Interface injection: By defining an interface, placing the dependent methods within the interface, and implementing the interface in a structure. The consumer depends on the interface rather than a specific structure, allowing for dynamic replacement of dependencies at runtime. This approach is suitable for scenarios where dependencies need to be dynamically replaced at runtime.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">type<\/span> Dependency <span class=\"hljs-keyword\">interface<\/span> {\r\n    Method()\r\n}\r\n\r\n<span class=\"hljs-keyword\">type<\/span> DependencyImpl <span class=\"hljs-keyword\">struct<\/span> {}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(d *DependencyImpl)<\/span><\/span> Method() {}\r\n\r\n<span class=\"hljs-keyword\">type<\/span> Foo <span class=\"hljs-keyword\">struct<\/span> {\r\n    Dependency Dependency\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">NewFoo<\/span><span class=\"hljs-params\">(dependency Dependency)<\/span><\/span> *Foo {\r\n    <span class=\"hljs-keyword\">return<\/span> &amp;Foo{\r\n        Dependency: dependency,\r\n    }\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Dependency Injection Container: Implementing dependency injection using a third-party library or a custom container. The container is responsible for managing the creation and lifecycle of dependencies, injecting them where needed. This approach is suitable for complex dependency relationships and large-scale applications.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">type<\/span> DependencyImpl <span class=\"hljs-keyword\">struct<\/span> {}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-params\">(d *DependencyImpl)<\/span><\/span> Method() {}\r\n\r\n<span class=\"hljs-keyword\">type<\/span> Foo <span class=\"hljs-keyword\">struct<\/span> {\r\n    Dependency Dependency\r\n}\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">NewFoo<\/span><span class=\"hljs-params\">()<\/span><\/span> *Foo {\r\n    <span class=\"hljs-keyword\">return<\/span> &amp;Foo{}\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    container := di.NewContainer()\r\n    container.Register(&amp;DependencyImpl{})\r\n    container.Register(<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(dependency Dependency)<\/span><\/span> *Foo {\r\n        <span class=\"hljs-keyword\">return<\/span> &amp;Foo{\r\n            Dependency: dependency,\r\n        }\r\n    })\r\n\r\n    foo := container.Resolve((*Foo)(<span class=\"hljs-literal\">nil<\/span>)).(*Foo)\r\n}\r\n<\/code><\/pre>\n<p>These are several common methods for implementing dependency injection. The appropriate method can be chosen based on the specific application scenario and requirements.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are several methods for implementing dependency injection in Golang. Constructor injection: by defining a constructor in the struct with dependent parameters, the dependencies are passed when creating an instance of the struct. This approach requires manually creating struct instances and passing in dependencies, which makes it easy to use mock dependencies in unit tests. [&hellip;]<\/p>\n","protected":false},"author":7,"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-18540","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>What is the implementation method of dependency injection in Golang? - 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\/what-is-the-implementation-method-of-dependency-injection-in-golang\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is the implementation method of dependency injection in Golang?\" \/>\n<meta property=\"og:description\" content=\"There are several methods for implementing dependency injection in Golang. Constructor injection: by defining a constructor in the struct with dependent parameters, the dependencies are passed when creating an instance of the struct. This approach requires manually creating struct instances and passing in dependencies, which makes it easy to use mock dependencies in unit tests. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-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-15T17:08:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T13:33:06+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=\"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\/what-is-the-implementation-method-of-dependency-injection-in-golang\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/\"},\"author\":{\"name\":\"Sophia Anderson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30\"},\"headline\":\"What is the implementation method of dependency injection in Golang?\",\"datePublished\":\"2024-03-15T17:08:55+00:00\",\"dateModified\":\"2024-03-21T13:33:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/\"},\"wordCount\":227,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/\",\"name\":\"What is the implementation method of dependency injection in Golang? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T17:08:55+00:00\",\"dateModified\":\"2024-03-21T13:33:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is the implementation method of dependency injection 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":"What is the implementation method of dependency injection in Golang? - 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\/what-is-the-implementation-method-of-dependency-injection-in-golang\/","og_locale":"en_US","og_type":"article","og_title":"What is the implementation method of dependency injection in Golang?","og_description":"There are several methods for implementing dependency injection in Golang. Constructor injection: by defining a constructor in the struct with dependent parameters, the dependencies are passed when creating an instance of the struct. This approach requires manually creating struct instances and passing in dependencies, which makes it easy to use mock dependencies in unit tests. [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T17:08:55+00:00","article_modified_time":"2024-03-21T13:33:06+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":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/"},"author":{"name":"Sophia Anderson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30"},"headline":"What is the implementation method of dependency injection in Golang?","datePublished":"2024-03-15T17:08:55+00:00","dateModified":"2024-03-21T13:33:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/"},"wordCount":227,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/","url":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/","name":"What is the implementation method of dependency injection in Golang? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T17:08:55+00:00","dateModified":"2024-03-21T13:33:06+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-implementation-method-of-dependency-injection-in-golang\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What is the implementation method of dependency injection 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\/18540","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=18540"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18540\/revisions"}],"predecessor-version":[{"id":52228,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18540\/revisions\/52228"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}