{"id":17729,"date":"2024-03-15T15:35:44","date_gmt":"2024-03-15T15:35:44","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/"},"modified":"2024-03-21T11:36:10","modified_gmt":"2024-03-21T11:36:10","slug":"how-to-use-reflect-in-golang","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/","title":{"rendered":"How to use reflect in Golang?"},"content":{"rendered":"<p>In Golang, the reflect package provides a mechanism to inspect the type and value of variables, as well as the ability to dynamically call methods and modify values at runtime. Here are some common examples of operations using reflect:<\/p>\n<ol>\n<li>Get the type of variable.<\/li>\n<\/ol>\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\t<span class=\"hljs-string\">\"reflect\"<\/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-keyword\">var<\/span> x = <span class=\"hljs-number\">42<\/span>\r\n\tfmt.Println(reflect.TypeOf(x))  <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1aint<\/span>\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Get the value of the variable.<\/li>\n<\/ol>\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\t<span class=\"hljs-string\">\"reflect\"<\/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-keyword\">var<\/span> x = <span class=\"hljs-number\">42<\/span>\r\n\tvalue := reflect.ValueOf(x)\r\n\tfmt.Println(value.Int())  <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1a42<\/span>\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Change the value of the variable.<\/li>\n<\/ol>\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\t<span class=\"hljs-string\">\"reflect\"<\/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-keyword\">var<\/span> x = <span class=\"hljs-number\">42<\/span>\r\n\tvalue := reflect.ValueOf(&amp;x).Elem()  <span class=\"hljs-comment\">\/\/ \u53d6\u53d8\u91cf\u7684\u5730\u5740\u5e76\u83b7\u53d6\u53ef\u4fee\u6539\u7684\u503c<\/span>\r\n\tvalue.SetInt(<span class=\"hljs-number\">24<\/span>)\r\n\tfmt.Println(x)  <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1a24<\/span>\r\n}\r\n<\/code><\/pre>\n<ol>\n<li>Method invocation:<\/li>\n<\/ol>\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\t<span class=\"hljs-string\">\"reflect\"<\/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-params\">(p Person)<\/span><\/span> SayHello() {\r\n\tfmt.Println(<span class=\"hljs-string\">\"Hello, my name is\"<\/span>, p.Name)\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\tp := Person{Name: <span class=\"hljs-string\">\"Alice\"<\/span>, Age: <span class=\"hljs-number\">20<\/span>}\r\n\tvalue := reflect.ValueOf(p)\r\n\tmethod := value.MethodByName(<span class=\"hljs-string\">\"SayHello\"<\/span>)\r\n\tmethod.Call(<span class=\"hljs-literal\">nil<\/span>)  <span class=\"hljs-comment\">\/\/ \u8f93\u51fa\uff1aHello, my name is Alice<\/span>\r\n}\r\n<\/code><\/pre>\n<p>These are just some basic examples of how to use reflection, the reflect package provides more functionality for handling reflection operations on variables. Please be cautious when using reflection as it can lead to a decrease in performance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Golang, the reflect package provides a mechanism to inspect the type and value of variables, as well as the ability to dynamically call methods and modify values at runtime. Here are some common examples of operations using reflect: Get the type of variable. package main import ( &#8220;fmt&#8221; &#8220;reflect&#8221; ) func main() { var [&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-17729","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 to use reflect 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\/how-to-use-reflect-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 use reflect in Golang?\" \/>\n<meta property=\"og:description\" content=\"In Golang, the reflect package provides a mechanism to inspect the type and value of variables, as well as the ability to dynamically call methods and modify values at runtime. Here are some common examples of operations using reflect: Get the type of variable. package main import ( &quot;fmt&quot; &quot;reflect&quot; ) func main() { var [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-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-15T15:35:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T11:36:10+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=\"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-reflect-in-golang\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/\"},\"author\":{\"name\":\"Olivia Parker\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\"},\"headline\":\"How to use reflect in Golang?\",\"datePublished\":\"2024-03-15T15:35:44+00:00\",\"dateModified\":\"2024-03-21T11:36:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/\"},\"wordCount\":102,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/\",\"name\":\"How to use reflect in Golang? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T15:35:44+00:00\",\"dateModified\":\"2024-03-21T11:36:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use reflect 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\/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 to use reflect 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\/how-to-use-reflect-in-golang\/","og_locale":"en_US","og_type":"article","og_title":"How to use reflect in Golang?","og_description":"In Golang, the reflect package provides a mechanism to inspect the type and value of variables, as well as the ability to dynamically call methods and modify values at runtime. Here are some common examples of operations using reflect: Get the type of variable. package main import ( \"fmt\" \"reflect\" ) func main() { var [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T15:35:44+00:00","article_modified_time":"2024-03-21T11:36:10+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":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/"},"author":{"name":"Olivia Parker","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9"},"headline":"How to use reflect in Golang?","datePublished":"2024-03-15T15:35:44+00:00","dateModified":"2024-03-21T11:36:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/"},"wordCount":102,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/","name":"How to use reflect in Golang? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T15:35:44+00:00","dateModified":"2024-03-21T11:36:10+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-reflect-in-golang\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to use reflect 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\/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\/17729","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=17729"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/17729\/revisions"}],"predecessor-version":[{"id":51359,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/17729\/revisions\/51359"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=17729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=17729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=17729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}