Home > Article > Backend Development > Can Nested Classes Exist Within Functions in Golang?
Can Nested Classes Exist Within Functions in Golang?
Golang permits the nesting of structs within functions, but not functions within other functions (excluding lambda functions). This limitation raises the question of whether it's possible to define nested classes within functions in Golang.
Consider the following example:
<code class="go">func f() { // Nested struct Cls within f type Cls struct { // ... } // Attempt to bind foo to Cls fails func (c *Cls) foo() { // ... } }</code>
In this case, the attempt to bind the foo function to the nested class Cls will fail. This might seem surprising, given that classes are not diminished inside functions.
Function Literals to the Rescue
Although nesting functions within other functions is not allowed in Golang, there is a workaround using function literals:
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
Here, we create a variable foo of type function, which is declared inside another function f. Calling the "outer" function f outputs: "Hello World!" as expected.
This solution allows us to achieve a similar behavior to nested classes within functions, albeit using a different mechanism.
The above is the detailed content of Can Nested Classes Exist Within Functions in Golang?. For more information, please follow other related articles on the PHP Chinese website!