Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Golang nested class inside function

Tags:

go

nested

Go supports nested struct inside function but no nested function except lambda, does it mean there is no way to define a nested class inside function?

func f() {
    // nested struct Cls inside f
    type Cls struct {
    ...
    }
    // try bounding foo to Cls but fail
    func (c *Cls) foo() {
    ...
    }
}

Thus it feels a bit strange that class is weaken inside function.

Any hints?

like image 766
Hayes Pan Avatar asked Jan 31 '15 13:01

Hayes Pan


1 Answers

Actually it doesn't matter if you want to declare the function with or without a receiver: nesting functions in Go are not allowed.

Although you can use Function literals to achieve something like this:

func f() {
    foo := func(s string) {
        fmt.Println(s)
    }

    foo("Hello World!")
}

Here we created a variable foo which has a function type and it is delcared inside another function f. Calling the "outer" function f outputs: "Hello World!" as expected.

Try it on Go Playground.

like image 112
icza Avatar answered Oct 04 '22 01:10

icza