{"id":14685,"date":"2024-03-15T09:44:21","date_gmt":"2024-03-15T09:44:21","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/"},"modified":"2025-08-06T12:03:32","modified_gmt":"2025-08-06T12:03:32","slug":"how-to-use-deep-copy-and-shallow-copy-in-golang","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/","title":{"rendered":"Go Deep vs Shallow Copy Guide"},"content":{"rendered":"<p>In Golang, deep copy and shallow copy refer to whether the reference type data of an object is copied when copying the object. Here are the methods for deep copy and shallow copy.<\/p>\n<p>Shallow copy:<br \/>\nA shallow copy refers to copying only the values of an object without duplicating reference type data. In Golang, shallow copy can be done using the assignment operator = or the copy function.<\/p>\n<p>Sample code:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">package<\/span> main\r\n\r\n<span class=\"hljs-keyword\">import<\/span> (\r\n\t<span class=\"hljs-string\">\"fmt\"<\/span>\r\n)\r\n\r\n<span class=\"hljs-keyword\">type<\/span> Person <span class=\"hljs-keyword\">struct<\/span> {\r\n\tName <span class=\"hljs-type\">string<\/span>\r\n\tAge  <span class=\"hljs-type\">int<\/span>\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\t<span class=\"hljs-comment\">\/\/ \u521b\u5efa\u4e00\u4e2aPerson\u5bf9\u8c61<\/span>\r\n\tp1 := Person{Name: <span class=\"hljs-string\">\"Alice\"<\/span>, Age: <span class=\"hljs-number\">20<\/span>}\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u4f7f\u7528\u8d4b\u503c\u64cd\u4f5c\u7b26\u8fdb\u884c\u6d45\u62f7\u8d1d<\/span>\r\n\tp2 := p1\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u4fee\u6539p2\u7684Name\u5c5e\u6027<\/span>\r\n\tp2.Name = <span class=\"hljs-string\">\"Bob\"<\/span>\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u6253\u5370p1\u548cp2\u7684Name\u5c5e\u6027<\/span>\r\n\tfmt.Println(p1.Name) <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1aAlice<\/span>\r\n\tfmt.Println(p2.Name) <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1aBob<\/span>\r\n}\r\n<\/code><\/pre>\n<p>Deep copy:<br \/>\nA deep copy refers to making a duplicate of an object, including copying any reference type data. In Golang, you can use the json.Marshal and json.Unmarshal functions to achieve deep copying.<\/p>\n<p>Sample code:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">package<\/span> main\r\n\r\n<span class=\"hljs-keyword\">import<\/span> (\r\n\t<span class=\"hljs-string\">\"encoding\/json\"<\/span>\r\n\t<span class=\"hljs-string\">\"fmt\"<\/span>\r\n)\r\n\r\n<span class=\"hljs-keyword\">type<\/span> Person <span class=\"hljs-keyword\">struct<\/span> {\r\n\tName <span class=\"hljs-type\">string<\/span>\r\n\tAge  <span class=\"hljs-type\">int<\/span>\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\t<span class=\"hljs-comment\">\/\/ \u521b\u5efa\u4e00\u4e2aPerson\u5bf9\u8c61<\/span>\r\n\tp1 := Person{Name: <span class=\"hljs-string\">\"Alice\"<\/span>, Age: <span class=\"hljs-number\">20<\/span>}\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u4f7f\u7528json.Marshal\u548cjson.Unmarshal\u8fdb\u884c\u6df1\u62f7\u8d1d<\/span>\r\n\tdata, _ := json.Marshal(p1)\r\n\t<span class=\"hljs-keyword\">var<\/span> p2 Person\r\n\tjson.Unmarshal(data, &amp;p2)\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u4fee\u6539p2\u7684Name\u5c5e\u6027<\/span>\r\n\tp2.Name = <span class=\"hljs-string\">\"Bob\"<\/span>\r\n\r\n\t<span class=\"hljs-comment\">\/\/ \u6253\u5370p1\u548cp2\u7684Name\u5c5e\u6027<\/span>\r\n\tfmt.Println(p1.Name) <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1aAlice<\/span>\r\n\tfmt.Println(p2.Name) <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1aBob<\/span>\r\n}\r\n<\/code><\/pre>\n<p>It is important to note that when performing deep copying, the member variables of the object must be exportable (i.e. starting with a capital letter), otherwise deep copying cannot be done properly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Golang, deep copy and shallow copy refer to whether the reference type data of an object is copied when copying the object. Here are the methods for deep copy and shallow copy. Shallow copy: A shallow copy refers to copying only the values of an object without duplicating reference type data. In Golang, shallow [&hellip;]<\/p>\n","protected":false},"author":12,"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":[3153,4095,9772,328,3154],"class_list":["post-14685","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-deep-copy","tag-go-programming","tag-golang","tag-memory-management","tag-shallow-copy"],"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>Go Deep vs Shallow Copy Guide - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn the difference between deep copy and shallow copy in Golang with practical examples. Master Go memory management.\" \/>\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-use-deep-copy-and-shallow-copy-in-golang\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go Deep vs Shallow Copy Guide\" \/>\n<meta property=\"og:description\" content=\"Learn the difference between deep copy and shallow copy in Golang with practical examples. Master Go memory management.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-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-15T09:44:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-06T12:03:32+00:00\" \/>\n<meta name=\"author\" content=\"Liam\" \/>\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=\"Liam\" \/>\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-use-deep-copy-and-shallow-copy-in-golang\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/\"},\"author\":{\"name\":\"Liam\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671\"},\"headline\":\"Go Deep vs Shallow Copy Guide\",\"datePublished\":\"2024-03-15T09:44:21+00:00\",\"dateModified\":\"2025-08-06T12:03:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/\"},\"wordCount\":145,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"deep copy\",\"Go programming\",\"Golang\",\"memory management\",\"shallow copy\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/\",\"name\":\"Go Deep vs Shallow Copy Guide - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T09:44:21+00:00\",\"dateModified\":\"2025-08-06T12:03:32+00:00\",\"description\":\"Learn the difference between deep copy and shallow copy in Golang with practical examples. Master Go memory management.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go Deep vs Shallow Copy Guide\"}]},{\"@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\/23786905eb7b377f45ddb01c17da7671\",\"name\":\"Liam\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g\",\"caption\":\"Liam\"},\"sameAs\":[\"http:\/\/Wilson\"],\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/liamwilson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Go Deep vs Shallow Copy Guide - Blog - Silicon Cloud","description":"Learn the difference between deep copy and shallow copy in Golang with practical examples. Master Go memory management.","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-use-deep-copy-and-shallow-copy-in-golang\/","og_locale":"en_US","og_type":"article","og_title":"Go Deep vs Shallow Copy Guide","og_description":"Learn the difference between deep copy and shallow copy in Golang with practical examples. Master Go memory management.","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T09:44:21+00:00","article_modified_time":"2025-08-06T12:03:32+00:00","author":"Liam","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Liam","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/"},"author":{"name":"Liam","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671"},"headline":"Go Deep vs Shallow Copy Guide","datePublished":"2024-03-15T09:44:21+00:00","dateModified":"2025-08-06T12:03:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/"},"wordCount":145,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["deep copy","Go programming","Golang","memory management","shallow copy"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/","name":"Go Deep vs Shallow Copy Guide - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T09:44:21+00:00","dateModified":"2025-08-06T12:03:32+00:00","description":"Learn the difference between deep copy and shallow copy in Golang with practical examples. Master Go memory management.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-deep-copy-and-shallow-copy-in-golang\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Go Deep vs Shallow Copy Guide"}]},{"@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\/23786905eb7b377f45ddb01c17da7671","name":"Liam","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g","caption":"Liam"},"sameAs":["http:\/\/Wilson"],"url":"https:\/\/www.silicloud.com\/blog\/author\/liamwilson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/14685","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\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=14685"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/14685\/revisions"}],"predecessor-version":[{"id":158723,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/14685\/revisions\/158723"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=14685"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=14685"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=14685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}