A structure or struct in Golang is a user-defined type, which allows us to create a group of elements of different types into a single unit. Any real-world entity which has some set of properties or fields can be represented as a struct. As we know that in Go language function is also a user-defined type so, you are allowed to create a function field in the Go structure. You can also create a function field in the Go structure using an anonymous function as shown in Example 2.
Syntax:
type function_name func()
type strcut_name struct{
var_name function_name
}
Let us discuss this concept with the help of the examples:
Example 1:
package main
import "fmt"
type Finalsalary func( int , int ) int
type Author struct {
name string
language string
Marticles int
Pay int
salary Finalsalary
}
func main() {
result := Author{
name: "Sonia" ,
language: "Java" ,
Marticles: 120,
Pay: 500,
salary: func(Ma int , pay int ) int {
return Ma * pay
},
}
fmt.Println( "Author's Name: " , result.name)
fmt.Println( "Language: " , result.language)
fmt.Println( "Total number of articles published in May: " , result.Marticles)
fmt.Println( "Per article pay: " , result.Pay)
fmt.Println( "Total salary: " , result.salary(result.Marticles, result.Pay))
}
|
Output:
Author's Name: Sonia
Language: Java
Total number of articles published in May: 120
Per article pay: 500
Total salary: 60000
Example 2:
package main
import "fmt"
type Author struct {
name string
language string
Tarticles int
Particles int
Pending func( int , int ) int
}
func main() {
result := Author{
name: "Sonia" ,
language: "Java" ,
Tarticles: 340,
Particles: 259,
Pending: func(Ta int , Pa int ) int {
return Ta - Pa
},
}
fmt.Println( "Author's Name: " , result.name)
fmt.Println( "Language: " , result.language)
fmt.Println( "Total number of articles: " , result.Tarticles)
fmt.Println( "Total number of published articles: " ,
result.Particles)
fmt.Println( "Pending articles: " , result.Pending(result.Tarticles,
result.Particles))
}
|
Output:
Author's Name: Sonia
Language: Java
Total number of articles: 340
Total number of published articles: 259
Pending articles: 81