{"id":1047,"date":"2026-08-16T17:18:01","date_gmt":"2026-08-16T17:18:01","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1047"},"modified":"2026-08-16T18:49:28","modified_gmt":"2026-08-16T18:49:28","slug":"go-tutorial-go-blank-identifier-_-master-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/go-tutorial-go-blank-identifier-_-master-tutorial\/","title":{"rendered":"Go Tutorial: Go Blank Identifier _ \u2014 Master Tutorial"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The underscore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">is called the <strong>blank identifier<\/strong> in Go.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The easiest way to understand it is:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><code>_<\/code> means: <strong>\u201cGo gives me this value, but I intentionally do not want to use it.\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">It is not a normal variable. You can put values <strong>into<\/strong> <code>_<\/code>, but you cannot get values <strong>back out of<\/strong> <code>_<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Why Does Go Need <code>_<\/code>?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Go is strict about unused variables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This code will not compile:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nfunc main() {\n    name := \"Rajesh\"\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go gives an error similar to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declared and not used: name\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go wants you to either:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>use the value, or<\/li>\n\n\n\n<li>explicitly tell Go that you want to ignore it.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">That is one major purpose of <code>_<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Most Common Use: <code>range<\/code> Loops<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Consider:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>menu := &#91;]string{\"Pizza\", \"Burger\", \"Pasta\"}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When you use <code>range<\/code> on a slice, Go can return two values:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for index, value := range menu {\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    menu := &#91;]string{\"Pizza\", \"Burger\", \"Pasta\"}\n\n    for index, item := range menu {\n        fmt.Println(index, item)\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 Pizza\n1 Burger\n2 Pasta\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>range menu\n   \u2502\n   \u251c\u2500\u2500 index\n   \u2502\n   \u2514\u2500\u2500 value\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Ignore the Index with <code>_<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose you only care about the food name.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for index, item := range menu {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for _, item := range menu {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    menu := &#91;]string{\"Pizza\", \"Burger\", \"Pasta\"}\n\n    for _, item := range menu {\n        fmt.Println(item)\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Pizza\nBurger\nPasta\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Meaning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for _, item := range menu {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">can be read as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for IGNORE_INDEX, item := range menu\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or mentally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>I don't care, item\n       \u2193       \u2193\n       _      item\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. If You Only Need the Index<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Interestingly, if you only need the index, you don&#8217;t need <code>_<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can write:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for index := range menu {\n    fmt.Println(index)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0\n1\n2\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You could technically write:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for index, _ := range menu {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">but that is unnecessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for index := range menu {\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. <code>_<\/code> with Functions Returning Multiple Values<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is another extremely common use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose a function returns two values:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func calculate() (int, int) {\n    return 10, 20\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Normally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a, b := calculate()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc calculate() (int, int) {\n    return 10, 20\n}\n\nfunc main() {\n    a, b := calculate()\n\n    fmt.Println(a)\n    fmt.Println(b)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10\n20\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But suppose you only want the first value.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a, _ := calculate()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Full example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc calculate() (int, int) {\n    return 10, 20\n}\n\nfunc main() {\n    a, _ := calculate()\n\n    fmt.Println(a)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>calculate()\n     \u2502\n     \u251c\u2500\u2500 10 \u2192 a\n     \u2502\n     \u2514\u2500\u2500 20 \u2192 _\n              ignored\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. <code>_<\/code> with Go Errors<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Go functions frequently return:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>value, error\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>number, err := strconv.Atoi(\"100\")\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>strconv.Atoi()<\/code> converts a string to an integer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n    \"fmt\"\n    \"strconv\"\n)\n\nfunc main() {\n    number, err := strconv.Atoi(\"100\")\n\n    if err != nil {\n        fmt.Println(\"Error:\", err)\n        return\n    }\n\n    fmt.Println(number)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes you may see:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>number, _ := strconv.Atoi(\"100\")\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This means:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>number \u2192 keep\nerror  \u2192 ignore\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n    \"fmt\"\n    \"strconv\"\n)\n\nfunc main() {\n    number, _ := strconv.Atoi(\"100\")\n\n    fmt.Println(number)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">However, be careful.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bad practice<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>number, _ := strconv.Atoi(input)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If <code>input<\/code> could be invalid, you are throwing away useful error information.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usually prefer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>number, err := strconv.Atoi(input)\n\nif err != nil {\n    fmt.Println(\"Invalid number\")\n    return\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Important Rule<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Using <code>_<\/code> for an error is legal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>value, _ := something()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">but don&#8217;t blindly ignore errors.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. <code>_<\/code> with Map Lookup<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Maps have a very useful two-value lookup syntax.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ages := map&#91;string]int{\n    \"Rajesh\": 42,\n    \"John\":   35,\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can do:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>age, exists := ages&#91;\"Rajesh\"]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    ages := map&#91;string]int{\n        \"Rajesh\": 42,\n        \"John\":   35,\n    }\n\n    age, exists := ages&#91;\"Rajesh\"]\n\n    fmt.Println(age)\n    fmt.Println(exists)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>42\ntrue\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose you don&#8217;t care about the age.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You only want to know:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Does <code>\"Rajesh\"<\/code> exist in the map?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_, exists := ages&#91;\"Rajesh\"]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    ages := map&#91;string]int{\n        \"Rajesh\": 42,\n    }\n\n    _, exists := ages&#91;\"Rajesh\"]\n\n    if exists {\n        fmt.Println(\"Rajesh exists\")\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Very common Go pattern:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if _, exists := ages&#91;\"Rajesh\"]; exists {\n    fmt.Println(\"Found\")\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think of it as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ages&#91;\"Rajesh\"]\n      \u2502\n      \u251c\u2500\u2500 value \u2192 _\n      \u2502           ignored\n      \u2502\n      \u2514\u2500\u2500 exists \u2192 true\/false\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. <code>_<\/code> with Type Assertions<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Go type assertions can also return two values:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>value, ok := something.(string)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var data any = \"Hello\"\n\n    value, ok := data.(string)\n\n    fmt.Println(value)\n    fmt.Println(ok)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Hello\ntrue\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose you only want to know whether <code>data<\/code> contains a string.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_, ok := data.(string)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var data any = \"Hello\"\n\n    _, ok := data.(string)\n\n    if ok {\n        fmt.Println(\"data contains a string\")\n    }\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. <code>_<\/code> with Multiple Assignments<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The blank identifier can appear anywhere in an assignment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example function:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func values() (int, int, int) {\n    return 10, 20, 30\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can ignore the middle value:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a, _, c := values()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Full example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc values() (int, int, int) {\n    return 10, 20, 30\n}\n\nfunc main() {\n    a, _, c := values()\n\n    fmt.Println(a)\n    fmt.Println(c)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10\n30\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Visual:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>values()\n\n10    20    30\n\u2193      \u2193     \u2193\na      _     c\n       \u2502\n     ignored\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can ignore several:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_, _, c := values()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a, _, _ := values()\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. <code>_<\/code> with Function Parameters<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You can also use <code>_<\/code> for a function parameter that you intentionally don&#8217;t need.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func calculate(_, b int) int {\n    return b * 2\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Full example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc calculate(_, b int) int {\n    return b * 2\n}\n\nfunc main() {\n    result := calculate(10, 20)\n\n    fmt.Println(result)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>40\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first argument:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">was received but intentionally ignored.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is less common in beginner programs but can be useful with callbacks or interfaces where a function signature requires parameters you don&#8217;t need.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. <code>_<\/code> with <code>range<\/code> over Maps<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>prices := map&#91;string]float64{\n    \"Small\":  2.50,\n    \"Medium\": 3.50,\n    \"Large\":  4.50,\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A map range provides:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for key, value := range prices {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for size, cost := range prices {\n    fmt.Println(size, cost)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You might get:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Small 2.5\nMedium 3.5\nLarge 4.5\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you only care about the price:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for _, cost := range prices {\n    fmt.Println(cost)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>key   \u2192 _\nvalue \u2192 cost\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Your Original Menu Example<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Your screenshot contained something like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func printMenu() {\n    for _, item := range menu {\n        fmt.Println(item.name)\n\n        for size, cost := range item.prices {\n            fmt.Printf(\"\\t%10s%10.2f\\n\", size, cost)\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s break it down.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The outer loop:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for _, item := range menu {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">means:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>menu\n \u2502\n \u251c\u2500\u2500 index \u2192 _       ignored\n \u2502\n \u2514\u2500\u2500 value \u2192 item    used\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The programmer doesn&#8217;t need:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0\n1\n2\n3\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">They only need each menu item.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The inner loop:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for size, cost := range item.prices {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">uses both returned values:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>size \u2192 Small\ncost \u2192 2.50\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So <code>_<\/code> is unnecessary there.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Blank Imports: <code>import _ \"package\"<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Now we get into an important advanced use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes you will see:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import _ \"some\/package\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import _ \"github.com\/lib\/pq\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is called a <strong>blank import<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Normally Go does not allow you to import a package without using it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This produces an error:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import \"github.com\/lib\/pq\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">if you never reference <code>pq<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But sometimes you don&#8217;t need to call functions from that package.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You only want Go to execute the package&#8217;s:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func init()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">logic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then you import it using:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import _ \"github.com\/lib\/pq\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Meaning:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Import this package for its <strong>side effects<\/strong>, but don&#8217;t give me a package identifier to use directly.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">This has historically been common with things like database drivers, image formats, and plugins.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import _ \"some\/package\"\n          \u2502\n          \u2193\n      load package\n          \u2502\n          \u2193\n      run init()\n          \u2502\n          \u2193\ndon't reference package directly\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. <code>_<\/code> for Interface Implementation Checks<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is a very useful advanced Go pattern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose you have an interface:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Speaker interface {\n    Speak()\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And a struct:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Person struct{}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">With:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func (p Person) Speak() {\n    fmt.Println(\"Hello\")\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Developers sometimes write:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var _ Speaker = Person{}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Full example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\ntype Speaker interface {\n    Speak()\n}\n\ntype Person struct{}\n\nfunc (p Person) Speak() {\n    fmt.Println(\"Hello\")\n}\n\nvar _ Speaker = Person{}\n\nfunc main() {\n    p := Person{}\n    p.Speak()\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">What does this do?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It tells the Go compiler:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Make sure <code>Person<\/code> implements <code>Speaker<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">But we don&#8217;t actually need to create a useful variable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the result is assigned to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If <code>Person<\/code> stops implementing <code>Speaker<\/code>, the program fails to compile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You will often see:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var _ MyInterface = (*MyType)(nil)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is called a <strong>compile-time interface assertion<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. <code>_ = variable<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You may occasionally see:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = value\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func main() {\n    name := \"Rajesh\"\n\n    _ = name\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This compiles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = name\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go would complain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declared and not used: name\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = name\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">basically tells Go:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Yes, I know <code>name<\/code> exists. I am intentionally not using it.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">This can occasionally be useful while experimenting or debugging.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But don&#8217;t make this a habit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name := getName()\n_ = name\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">usually remove the unnecessary variable if you don&#8217;t need it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. <code>_<\/code> Is NOT a Normal Variable<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This point is extremely important.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can assign:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = 100\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can assign again:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = \"Hello\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And again:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = true\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But you cannot do:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fmt.Println(_)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is invalid.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Why?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because <code>_<\/code> doesn&#8217;t store a value that you can retrieve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Think about <code>_<\/code> as a <strong>trash bin<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n            \u2502\n\"Hello\" \u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2192  _\n            \u2502     \ud83d\uddd1\ufe0f\ntrue \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\nNothing comes back out.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = 100\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">means:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">throw away <code>100<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">It does NOT mean:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">create a variable named <code>_<\/code> containing <code>100<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. <code>_<\/code> Can Be Used Multiple Times<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Unlike normal variable names, <code>_<\/code> can appear many times:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_, _, result := values()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>func data() (string, int, bool) {\n    return \"Rajesh\", 42, true\n}\n\nfunc main() {\n    _, _, active := data()\n\n    fmt.Println(active)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>true\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Both unwanted values disappear.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Short Variable Declaration and <code>_<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Consider:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>value, err := getData()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>:=<\/code> creates variables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But <code>_<\/code> does <strong>not<\/strong> count as a newly declared variable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_, err := getData()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">creates only:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>err\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It does not create <code>_<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This becomes important when learning Go&#8217;s <code>:=<\/code> rules later.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Common Patterns You Will See in Real Go Code<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Pattern 1 \u2014 Ignore slice index<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>for _, user := range users {\n    fmt.Println(user)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Very common.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pattern 2 \u2014 Map existence check<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if _, ok := users&#91;\"Rajesh\"]; ok {\n    fmt.Println(\"User exists\")\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Very common.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pattern 3 \u2014 Ignore unwanted return value<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>result, _ := calculate()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Common, but be careful if the ignored value is an error.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pattern 4 \u2014 Check type only<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if _, ok := data.(string); ok {\n    fmt.Println(\"It is a string\")\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Common.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pattern 5 \u2014 Side-effect import<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import _ \"some\/package\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">More advanced.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pattern 6 \u2014 Interface compile-time check<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>var _ SomeInterface = (*SomeType)(nil)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Very common in professional Go libraries.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. When Should You NOT Use <code>_<\/code>?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The most important case is errors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid this unless you&#8217;re certain the error does not matter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data, _ := os.ReadFile(\"config.txt\")\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the file doesn&#8217;t exist, you&#8217;ve thrown away the explanation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Better:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data, err := os.ReadFile(\"config.txt\")\n\nif err != nil {\n    fmt.Println(\"Unable to read file:\", err)\n    return\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A good rule:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><code>_<\/code> should mean <strong>\u201cI intentionally don&#8217;t need this value,\u201d<\/strong> not <strong>\u201cI don&#8217;t want to deal with this value.\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. Quick Reference Table<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Situation<\/th><th>Example<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td>Ignore range index<\/td><td><code>for _, v := range x<\/code><\/td><td>Ignore index<\/td><\/tr><tr><td>Ignore function result<\/td><td><code>x, _ := f()<\/code><\/td><td>Ignore second return<\/td><\/tr><tr><td>Ignore map value<\/td><td><code>_, ok := m[k]<\/code><\/td><td>Only check key existence<\/td><\/tr><tr><td>Ignore type assertion value<\/td><td><code>_, ok := x.(T)<\/code><\/td><td>Only check type<\/td><\/tr><tr><td>Ignore parameter<\/td><td><code>func f(_ int)<\/code><\/td><td>Parameter intentionally unused<\/td><\/tr><tr><td>Mark value unused<\/td><td><code>_ = x<\/code><\/td><td>Explicitly discard value<\/td><\/tr><tr><td>Side-effect import<\/td><td><code>import _ \"pkg\"<\/code><\/td><td>Run package initialization only<\/td><\/tr><tr><td>Interface check<\/td><td><code>var _ I = T{}<\/code><\/td><td>Verify interface implementation<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">22. Beginner Mental Model<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Whenever you see:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">mentally replace it with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IGNORE THIS VALUE\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for _, item := range menu {\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">becomes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for IGNORE_INDEX, item := range menu\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>value, _ := function()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">becomes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>value, IGNORE_SECOND_RESULT := function()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_, ok := myMap&#91;\"Rajesh\"]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">becomes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IGNORE_VALUE, check_if_it_exists\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That mental model works for almost every beginner use of <code>_<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">23. Mini Practice Program<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Try this complete program:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc getUser() (string, int, string) {\n    return \"Rajesh\", 42, \"India\"\n}\n\nfunc main() {\n\n    \/\/ 1. Ignore slice index\n    languages := &#91;]string{\"Go\", \"Python\", \"Java\"}\n\n    for _, language := range languages {\n        fmt.Println(language)\n    }\n\n    \/\/ 2. Ignore second function result\n    name, _, country := getUser()\n\n    fmt.Println(name)\n    fmt.Println(country)\n\n    \/\/ 3. Ignore map value\n    users := map&#91;string]int{\n        \"Rajesh\": 42,\n        \"John\":   35,\n    }\n\n    _, exists := users&#91;\"Rajesh\"]\n\n    fmt.Println(\"Exists:\", exists)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Go\nPython\nJava\nRajesh\nIndia\nExists: true\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This one small program demonstrates three of the most important uses of the blank identifier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">24. Final Rule to Remember<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The entire concept can be summarized in one sentence:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>_ = \"I intentionally don't need this value.\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For your current learning stage, master these <strong>three uses first<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ 1. range\nfor _, item := range items {\n}\n\n\/\/ 2. multiple return values\nvalue, _ := function()\n\n\/\/ 3. map existence\n_, ok := myMap&#91;\"key\"]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once these feel natural, the advanced uses such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import _ \"package\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var _ Interface = (*Type)(nil)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">will be much easier to understand.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The underscore: is called the blank identifier in Go. The easiest way to understand it is: _ means: \u201cGo gives me this value, but I intentionally do&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1047","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1047"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1047\/revisions"}],"predecessor-version":[{"id":1051,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1047\/revisions\/1051"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}