{"id":231,"date":"2024-09-13T08:39:54","date_gmt":"2024-09-13T01:39:54","guid":{"rendered":"https:\/\/gotutorial.org\/?page_id=231"},"modified":"2024-09-27T09:48:47","modified_gmt":"2024-09-27T02:48:47","slug":"go-functions-are-first-class-citizens","status":"publish","type":"page","link":"https:\/\/www.gotutorial.org\/go-tutorial\/go-functions-are-first-class-citizens\/","title":{"rendered":"Go Functions are First-class Citizens"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you will learn how to assign a function to a variable, pass a function to another as an argument, and return a function from another function.<\/p>\n\n\n\n<p>In Go, you may come across the phrase: <strong>Go functions are first-class citizens<\/strong>. This means that Go treats <a href=\"https:\/\/gotutorial.org\/go-tutorial\/go-functions\/\">functions<\/a> as other values. In other words, you can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Assign a function to a <a href=\"https:\/\/gotutorial.org\/go-tutorial\/go-variables\/\">variable<\/a>.<\/li>\n\n\n\n<li>Pass a function as an argument to another function.<\/li>\n\n\n\n<li>Return a function from a function.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Assigning a function to a variable<\/h2>\n\n\n\n<p>The following example illustrates how to assign a function to a variable:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">package<\/span> main\n\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"fmt\"<\/span>\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n\t<span class=\"hljs-keyword\">return<\/span> x + y\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">subtract<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n\t<span class=\"hljs-keyword\">return<\/span> x - y\n}\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n\t<span class=\"hljs-keyword\">var<\/span> fn = add\n\tresult := fn(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">20<\/span>)\n\tfmt.Println(result)\n\n\tfn = subtract\n\tresult = fn(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>)\n\tfmt.Println(result)\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<p>First, define two functions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>add<\/code>: returns the sum of two integers.<\/li>\n\n\n\n<li><code>subtract<\/code>: returns the difference between two integers.<\/li>\n<\/ul>\n\n\n\n<p>Next, assign the <code>add<\/code> function name to the variable <code>fn<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">var<\/span> fn = add<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"note\">Notice that we don&#8217;t place the parentheses <code>()<\/code> after the <code>add<\/code> function name.<\/p>\n\n\n\n<p>Then, call the <code>add<\/code> function via the <code>fn<\/code> variable and assign the return value to the <code>result<\/code> variable and display the result on the screen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">result := fn(<span class=\"hljs-number\">10<\/span>,<span class=\"hljs-number\">20<\/span>)\nfmt.Println(result) <span class=\"hljs-comment\">\/\/ Output 30 ( 20 + 10 ) <\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>After that, assign the <code>subtract<\/code> function name to the <code>fn<\/code> variable:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">fn = subtract<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Finally, call the <code>subtract<\/code> function via the <code>fn<\/code> variable and display the return value on the screen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">result = fn(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>)\nfmt.Println(result) <span class=\"hljs-comment\">\/\/ 10 (20 - 10)<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In Go, a variable is always associated with a type. In this example, the type of the <code>fn<\/code> variable is a function that accepts two integers and returns an integer. Go will infer the type of the <code>fn<\/code> variable like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">var<\/span> fn <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>We can assign both <code>add<\/code> and <code>subtract<\/code> functions to the <code>fn<\/code> variable because these functions have the same signature:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Go allows you to declare type alias for functions. For example, you can declare the type alias for the function that has two integer parameters and returns an integer:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">type<\/span> op <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span>, <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You can then use the <code>op<\/code> type alias to declare the <code>fn<\/code> variable as follows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">var<\/span> fn op<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Then you can assign any function that takes two integer parameters and returns an integer:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">fn = add<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Passing a function as an argument to another function<\/h2>\n\n\n\n<p>Go allows you to pass a function to another function as an argument. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">package<\/span> main\n\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"fmt\"<\/span>\n\n<span class=\"hljs-keyword\">type<\/span> op <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span>, <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span>\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n    <span class=\"hljs-keyword\">return<\/span> x + y\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">subtract<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n    <span class=\"hljs-keyword\">return<\/span> x - y\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">calculate<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>, fn op)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n    <span class=\"hljs-keyword\">return<\/span> fn(x, y)\n}\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n    result := calculate(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>, add)\n    fmt.Println(result)\n\n    result = calculate(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>, subtract)\n    fmt.Println(result)\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example: <\/p>\n\n\n\n<p>Step 1. Define the op type alias for the function that accepts two integers and returns an integer:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">type op func(int, int) int<\/code><\/span><\/pre>\n\n\n<p>Step 2. Define the <code>calculate<\/code> function that takes two integer parameters and one <code>fn<\/code> with the type <code>op<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">calculate<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>, y <span class=\"hljs-keyword\">int<\/span>, fn op)<\/span> <span class=\"hljs-title\">int<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 3. Call the <code>fn<\/code> function inside the <code>calculate<\/code> function:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">return<\/span> fn(x, y)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 4. Call the calculate function and pass the add function name as an argument:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">result := calculate(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>, add)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"note\">Notice that we also don&#8217;t place the parentheses after the add function name when passing to the calculate function.<\/p>\n\n\n\n<p>Inside the <code>calculate<\/code> function, the <code>add<\/code> function will be called with two arguments 20 and 10:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">add(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 5. Call the <code>calculate<\/code> function and pass the <code>subtract<\/code> function name to it as an argument:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">result = calculate(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>, subtract)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Similarly, the calculate function will call subtract via the <code>fn<\/code> argument:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">fn(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">10<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It is equivalent to:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">subtract(20, 10)<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">A practical example of passing a function as an argument to a function<\/h3>\n\n\n\n<p>The following example shows a practical example of passing a function to another function as an argument:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">package<\/span> main\n\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"fmt\"<\/span>\n\n<span class=\"hljs-keyword\">type<\/span> predicate <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">bool<\/span><\/span>\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">isEven<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">bool<\/span><\/span> {\n    <span class=\"hljs-keyword\">return<\/span> x%<span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>\n}\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">isOdd<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">bool<\/span><\/span> {\n    <span class=\"hljs-keyword\">return<\/span> x%<span class=\"hljs-number\">2<\/span> != <span class=\"hljs-number\">0<\/span>\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">filter<\/span><span class=\"hljs-params\">(numbers &#91;]<span class=\"hljs-keyword\">int<\/span>, p predicate)<\/span> &#91;]<span class=\"hljs-title\">int<\/span><\/span> {\n    <span class=\"hljs-keyword\">var<\/span> result &#91;]<span class=\"hljs-keyword\">int<\/span>\n    <span class=\"hljs-keyword\">for<\/span> _, n := <span class=\"hljs-keyword\">range<\/span> numbers {\n        <span class=\"hljs-keyword\">if<\/span> p(n) {\n            result = <span class=\"hljs-built_in\">append<\/span>(result, n)\n        }\n    }\n    <span class=\"hljs-keyword\">return<\/span> result\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n    numbers := &#91;]<span class=\"hljs-keyword\">int<\/span>{<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>, <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-number\">8<\/span>, <span class=\"hljs-number\">9<\/span>, <span class=\"hljs-number\">10<\/span>}\n\n    evenNumbers := filter(numbers, isEven)\n    fmt.Println(evenNumbers)\n\n    oddNumbers := filter(numbers, isOdd)\n    fmt.Println(oddNumbers)\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<p>Step 1. Define a type alias for a function that accepts an integer and returns a boolean:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">type<\/span> predicate <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">bool<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 2. Define an <code>isEven<\/code> function that returns true if a number is odd:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">isEven<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">bool<\/span><\/span> {\n\t<span class=\"hljs-keyword\">return<\/span> x%<span class=\"hljs-number\">2<\/span> == <span class=\"hljs-number\">0<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 3. Define a <code>filter<\/code> function that filters elements of an integer array using the <code>predicate<\/code> function:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">filter<\/span><span class=\"hljs-params\">(numbers &#91;]<span class=\"hljs-keyword\">int<\/span>, p predicate)<\/span> &#91;]<span class=\"hljs-title\">int<\/span><\/span> {\n    <span class=\"hljs-keyword\">var<\/span> result &#91;]<span class=\"hljs-keyword\">int<\/span>\n    <span class=\"hljs-keyword\">for<\/span> _, n := <span class=\"hljs-keyword\">range<\/span> numbers {\n        <span class=\"hljs-keyword\">if<\/span> p(n) {\n            result = <span class=\"hljs-built_in\">append<\/span>(result, n)\n        }\n    }\n    <span class=\"hljs-keyword\">return<\/span> result\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How the filter function works.<\/p>\n\n\n\n<p>First, declare an integer array (<code>result<\/code>) that stores the numbers when passing to the <code>predicate<\/code> function will make it return true:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">var<\/span> result &#91;]<span class=\"hljs-keyword\">int<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, iterate over the elements of the numbers array using a <a href=\"https:\/\/gotutorial.org\/go-tutorial\/go-for-range\/\">for range<\/a> loop:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">for<\/span> _, n := <span class=\"hljs-keyword\">range<\/span> numbers {<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Third, append the number to the <code>result<\/code> array if it satisfies the <code>predicate<\/code> function:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">if<\/span> p(n) {\n    result = <span class=\"hljs-built_in\">append<\/span>(result, n)\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Finally, return the <code>result<\/code> array:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">return<\/span> result<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 4. Declare and initialize an integer array:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">numbers := &#91;] <span class=\"hljs-keyword\">int<\/span> {<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">6<\/span>, <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-number\">8<\/span>, <span class=\"hljs-number\">9<\/span>, <span class=\"hljs-number\">10<\/span>}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 5. Pass the numbers array and <code>isEven<\/code> function to the <code>filter<\/code> function to return only even integers from the <code>numbers<\/code> array.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">evenNumbers := filter(numbers, isEven)\nfmt.Println(evenNumbers)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 6. Pass the numbers array and <code>isOdd<\/code> function to the <code>filter<\/code> function to return only odd integers from the <code>numbers<\/code> array.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">oddNumbers := filter(numbers, isOdd)\nfmt.Println(oddNumbers)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The filter function is known as a high-order function because it accepts a function as an argument.<\/p>\n\n\n\n<p class=\"note\">A high-order function is a function that accepts another function as an argument or return a function as a return value<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Returning a function from a function<\/h2>\n\n\n\n<p>The following example shows how to return a function from a function:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">package<\/span> main\n\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"fmt\"<\/span>\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">adder<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">func<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n        <span class=\"hljs-keyword\">return<\/span> x + y\n    }\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n    add2 := adder(<span class=\"hljs-number\">2<\/span>)\n    fmt.Println(add2(<span class=\"hljs-number\">10<\/span>)) <span class=\"hljs-comment\">\/\/ Output: 12<\/span>\n\n    add5 := adder(<span class=\"hljs-number\">5<\/span>)\n    fmt.Println(add5(<span class=\"hljs-number\">10<\/span>)) <span class=\"hljs-comment\">\/\/ Output: 15<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-number\">12<\/span>\n<span class=\"hljs-number\">15<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works:<\/p>\n\n\n\n<p>Step 1. Define the <code>adder<\/code> function that accepts an integer and returns a function that accepts an integer and returns an integer:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span> <span class=\"hljs-title\">adder<\/span><span class=\"hljs-params\">(x <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">func<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 2. Return a function literal that accepts an integer and returns an integer:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\"><span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">func<\/span><span class=\"hljs-params\">(y <span class=\"hljs-keyword\">int<\/span>)<\/span> <span class=\"hljs-title\">int<\/span><\/span> {\n   <span class=\"hljs-keyword\">return<\/span> x + y\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Inside the function literal, return the sum of x and y.<\/p>\n\n\n\n<p>Step 3. Call the <code>adder<\/code> function with a number 2 and assign the return value, which is a function, to the <code>add2<\/code> variable:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">add2 := adder(<span class=\"hljs-number\">2<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Note that the type of the <code>add2<\/code> is a function that accepts an integer and returns an integer.<\/p>\n\n\n\n<p>Step 4. Call the <code>add2<\/code> function with 10 as an argument and print out the result:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">result := add2(<span class=\"hljs-number\">10<\/span>)\nfmt.Println(result) <span class=\"hljs-comment\">\/\/ Output: 12<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 5. Call the adder function with the number 5 as an argument:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">add5 := adder(<span class=\"hljs-number\">5<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-35\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Step 6. Call the <code>add5<\/code> function with 10 as an argument and print out the result:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"Go\" data-shcb-language-slug=\"go\"><span><code class=\"hljs language-go\">result = add5(<span class=\"hljs-number\">10<\/span>)\nfmt.Println(result) <span class=\"hljs-comment\">\/\/ Output: 15<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-36\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Go<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">go<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Functions are first-class citizens means that you can assign a function to a variable, pass a function as an argument to a function, and return a function from a function.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<div class=\"wth-question\">Was this tutorial helpful?<\/div>\n\t<div class=\"wth-thumbs\">\n\t\t<button\n\t\t\tdata-post=\"231\"\n\t\t\tdata-post-url=\"https:\/\/www.gotutorial.org\/go-tutorial\/go-functions-are-first-class-citizens\/\"\n\t\t\tdata-post-title=\"Go Functions are First-class Citizens\"\n\t\t\tdata-response=\"1\"\n\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t>\n\t\t\t<svg\n\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t><\/path>\n\t\t\t<\/svg>\n\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t<\/button>\n\n\t\t<button\n\t\t\tdata-response=\"0\"\n\t\t\tdata-post=\"231\"\n\t\t\tdata-post-url=\"https:\/\/www.gotutorial.org\/go-tutorial\/go-functions-are-first-class-citizens\/\"\n\t\t\tdata-post-title=\"Go Functions are First-class Citizens\"\n\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t>\n\t\t\t<svg\n\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t><\/path>\n\t\t\t<\/svg>\n\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t<\/button>\n\t<\/div>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\t\t\t<input type=\"button\" name=\"wth-submit\" class=\"wth-btn wth-btn-submit\" id=\"wth-submit\" \/>\n\t\t\t<input type=\"button\" class=\"wth-btn wth-btn-cancel\" value=\"Cancel\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you will learn how to assign a function to a variable, pass a function to another as an argument, and return a function from another function. In Go, you may come across the phrase: Go functions are first-class citizens. This means that Go treats functions as other values. In other words, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":10,"menu_order":14,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-231","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/pages\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/comments?post=231"}],"version-history":[{"count":6,"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/pages\/231\/revisions"}],"predecessor-version":[{"id":266,"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/pages\/231\/revisions\/266"}],"up":[{"embeddable":true,"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/pages\/10"}],"wp:attachment":[{"href":"https:\/\/www.gotutorial.org\/wp-json\/wp\/v2\/media?parent=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}