Golang 函数作为结构体中的一个字段

Golang 函数作为结构体中的一个字段

Golang中的结构是一种用户定义的类型,它允许我们创建一组不同类型的元素为一个单元。任何现实世界中的实体都有一些属性或字段,可以用结构来表示。我们知道,在围棋语言中,函数也是一种用户定义的类型,因此,你可以在围棋结构中创建一个函数字段。你也可以使用匿名函数在Go结构中创建一个函数字段,如例2所示。

语法

type function_name func()
type strcut_name struct{
  var_name  function_name
}

让我们借助于例子来讨论这个概念。

例1 :

// Go program to illustrate the function
// as a field in Go structure
package main
  
import "fmt"
  
// Finalsalary of function type
type Finalsalary func(int, int) int
  
// Creating structure
type Author struct {
    name      string
    language  string
    Marticles int
    Pay       int
  
    // Function as a field
    salary Finalsalary
}
  
// Main method
func main() {
  
    // Initializing the fields
    // of the structure
    result := Author{
        name:      "Sonia",
        language:  "Java",
        Marticles: 120,
        Pay:       500,
        salary: func(Ma int, pay int) int {
            return Ma * pay
        },
    }
  
    // Display values
    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))
}

输出

Author's Name:  Sonia
Language:  Java
Total number of articles published in May:  120
Per article pay:  500
Total salary:  60000

例2 :

// Go program to illustrate the function
// as a field in Go structure
// Using anonymous function
package main
  
import "fmt"
  
// Creating structure
type Author struct {
    name      string
    language  string
    Tarticles int
    Particles int
    Pending   func(int, int) int
}
  
// Main method
func main() {
  
    // Initializing the fields
    // of the structure
    result := Author{
        name:      "Sonia",
        language:  "Java",
        Tarticles: 340,
        Particles: 259,
        Pending: func(Ta int, Pa int) int {
            return Ta - Pa
        },
    }
  
    // Display values
    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))
}

输出

Author's Name:  Sonia
Language:  Java
Total number of articles:  340
Total number of published articles:  259
Pending articles:  81

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程