Golang中的结构或struct是用户定义的类型,它允许我们在一个单元中创建一组不同类型的元素。任何具有一组属性或字段的真实实体都可以表示为结构。我们知道在Go语言中函数也是用户定义的类型,所以你可以在Go结构中创建一个函数字段。您还可以使用匿名函数在Go结构中创建一个函数字段,如示例2所示。
语法:
type function_name func()
type strcut_name struct{
var_name function_name
}
让我们借助示例来讨论这个概念:
//作为Go结构中的字段
package main
import "fmt"
// Finalsalary函数类型
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("作者姓名: ", result.name)
fmt.Println("语言: ", result.language)
fmt.Println("五月份发表的文章总数: ", result.Marticles)
fmt.Println("每篇报酬: ", result.Pay)
fmt.Println("总工资: ", result.salary(result.Marticles, result.Pay))
}
输出:
作者姓名: Sonia
语言: Java
五月份发表的文章总数: 120
每篇报酬: 500
总工资: 60000
使用匿名函数作为Go结构中的一个字段2:
//使用匿名函数作为Go结构中的一个字段
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("作者姓名: ", result.name)
fmt.Println("语言: ", result.language)
fmt.Println("文章总数: ", result.Tarticles)
fmt.Println("发表文章总数: ", result.Particles)
fmt.Println("待处理文章: ", result.Pending(result.Tarticles, result.Particles))
}
输出:
作者姓名: Sonia
语言: Java
文章总数: 340
发表文章总数: 259
待处理文章: 81