Skip to main content

Do you support us?

Business address

Anonymous Caller Function

You can know about function values but this article also link with my previous blog. Let's start with "Anonymous Caller Function"

package main
import (
func squares() func() int {
var x int
return func() int {
return x * x
func main() {
f := squares()
fmt.Println(f()) // "1"
fmt.Println(f()) // "4"
fmt.Println(f()) // "9"
fmt.Println(f()) // "16"
What we already Know ?
This code confuse you, don't worry let's start what we already know about functions. 
 func squares() int{ return x *x}. This function return square which we pass as argument.
 f := squares() function definition receive by f for further processing.
What we don't know?
func squares() func() int {
var x int
return func() int {
return x * x
            1. func() int: this is an anonymous function. Anonymous function are those functions which is similar like inner function, but without name. 
           2. return func() int: this function inside square function. Anonymous function use local variables, which are already declare in square function. Return fun() int tells that compiler anonymous function value. Again this is a function so, we can like function except before function return keyword use. Actually Function B take Function A as a input and after processing it return as a output of Function AB. That's why confuse so many times.  

Recursion in Anonymous Function:
             var visitAll func(items []string)
              visitAll = func(items []string) {}
 Recursion in Anonymous function in two steps.
        1. declare a variable along with function definition 
        2. initialize variable with function which to be recursive

func topoSort(m map[string][]string) []string { 
var order []string seen := make(map[string]bool) 
var visitAll func(items []string)
         visitAll = func(items []string) { 
                                   for _, item := range items { 
                                        if !seen[i tem] { seen[item] = true 
                                          order = append(order, item) } 
             var keys []string 
            for key := range m { 
                      keys = append(keys, key)
             visitAll(keys) return order 
If you don't follow these steps these, then program will not execute.


Popular posts from this blog

Rosicrucian cipher

In 1513 Cornelius Agrippa introduce early form Rosicrucian Cipher in his books Occult of Philosophy. Geometric and simple substitution cipher are well known ciphers      Pigpen , Freemason, Napoleon and tic tac toe ciphers in which alphabets or symbols arrange in grids.  This is an anagram, "How to reconstruct a data " lets encode the message.       Pigpen cipher , Rosicrucian and Tic tac toe Cipher                      Thank you have a good day.    


Golang provide  own enumerate method which is easy and very powerful. I will show you enumerate with in a sec. When i code enumerate in java, believe me i don't understand why it's used? So i never play from this card at that time, but recently when i start learning go. Now i used where it's used and why? Enumerate basically a counting method. Code   package main import ( " fmt " ) type Weekend int const ( Sunday Weekend = iota Monday Tuesday Wednesday Thursday Friday Saturday ) func main () { fmt. Printf ( " %d " ,Saturday) } If you remember adding color layer then you familiar from this code.  First i create my own type called weekend then used this type.  Iota-generator:   Things that confuse you Sunday Weekend = iota & Monday without value. Before we start Iota-generator first we understand monday without type or value         const ( c = 1 // c : 1 d      // d : 1 ) fmt.Pr

Every Object have a structure

If you start your programming career from c , then you know little about structs. Later Struct replace by classes in object oriented programming. However Go inherit from C. Structs :     With the help of structs, programmer can develop any type of structure         List        Stack        Queue        Trees        Graphs package main import ( " fmt " ) type Students struct { ID int Name string } var record Students func Id ( i int ) int { record. ID = i return record. ID } func Name ( name string ) string { record. Name = name return record. Name } func main () { var id int = 0 var name string = " ali " fmt. Println ( " id: " , Id (id), " name: " , Name (name)) } When we want to create custom type such as Celsius type Celsius float64, same with structs type Students structs except type need data type and in structs. You tells that's struct. Inside Structs