Maison > développement back-end > Golang > le corps du texte

méthode de la fonction Golang

WBOY
Libérer: 2023-05-05 21:51:07
original
631 Les gens l'ont consulté

Golang est un langage de programmation hautes performances, fortement typé et rapide. Il prend en charge les idées de programmation orientée objet et dispose d'une manière très flexible de définir des fonctions et des méthodes. Cet article présentera en détail la définition, le passage de paramètres, l'appel et les méthodes d'implémentation courantes des fonctions et méthodes dans Golang.

1. Définition et utilisation des fonctions

Définir des fonctions dans Golang est très simple, et sa syntaxe de base est la suivante :

func 函数名(参数1 类型1, 参数2 类型2, …) 返回类型 {
    //函数体代码
    return 返回值
}
Copier après la connexion

Parmi elles , Function name est le nom de la fonction, parameters sont les valeurs d'entrée de la fonction et return type est le type du valeur de sortie de la fonction. Dans le code du corps de la fonction, nous pouvons faire ce que nous voulons et renvoyer la valeur souhaitée en utilisant le mot-clé return. 函数名为函数的名称,参数为函数的输入值,返回类型是函数的输出值的类型。在函数体代码中,我们可以做任何我们想做的事情,并使用return关键字返回我们希望返回的值。

例如,下面是一个用于计算两个数之和的函数:

func add(a int, b int) int {
    return a + b
}
Copier après la connexion

函数的调用也很简单,只需提供函数名和参数即可:

result := add(1, 2) //输出结果为3
Copier après la connexion

二、方法的定义和使用

Golang中的方法与函数非常相似,但它与某个类型或变量相关联。方法通常用来修改或返回结构体、接口或其他类型的属性。方法的基本语法如下:

func (t 类型) 方法名(参数 参数类型) 返回类型 {
    //方法体代码
    return 返回值
}
Copier après la connexion

其中,(t 类型)指示该方法与类型t相关联。在方法体代码中我们可以通过t访问类型的属性和方法。与函数相似,方法也可以定义接收者,即该方法将附加到哪个实例上。

例如,下面是一个名为Rect的矩形类型,它有一个Area方法,用于计算矩形的面积:

type Rect struct {
    width, height int
}

func (r Rect) Area() int {
    return r.width * r.height
}
Copier après la connexion

在这个例子中,我们定义了一个名为Rect的矩形类型,该类型有一个widthheight属性。我们还定义了一个名为Area的方法,该方法使用矩形的属性来计算面积。由于我们使用矩形类型作为接收者,我们可以通过它的实例调用Area方法:

r := Rect{width: 10, height: 5}
result := r.Area()    //输出结果为50
Copier après la connexion

三、可变参数的使用

在Golang中,可以使用...(三个点)定义可变参数。这意味着函数或方法可以使用任意数量的参数。例如,下面是一个包含可变参数的函数:

func sum(nums ...int) int {
    result := 0
    for _, num := range nums {
        result += num
    }
    return result
}
Copier après la connexion

该函数接受一个名为nums的可变参数,它的类型是int。我们可以通过向该参数传递任意数量的整数来调用该函数:

result1 := sum(1, 2, 3, 4) //输出结果为10
result2 := sum(10, 20, 30) //输出结果为60
Copier après la connexion

四、闭包的使用

Golang中的闭包是指一个函数可以访问在其外部定义的变量,即使在函数返回后,变量仍然存在。这是因为Golang中的函数是第一类函数,可以像变量一样传递和使用。例如,下面是一个简单的闭包例子:

func intSeq() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

nextInt := intSeq()
fmt.Println(nextInt()) //输出结果为1
fmt.Println(nextInt()) //输出结果为2
Copier après la connexion

在这个例子中,我们创建了一个返回函数的函数intSeq。该函数定义了一个变量i,它是闭包的一部分。返回的函数也是一个闭包,它可以访问i并增加它。我们从intSeq中获取一个函数,称之为nextInt,然后使用它来获取两个整数。

五、接口的使用

在Golang中,接口是一组方法的声明,这些方法定义了一些对象的行为。与Java和C#等编程语言不同,Golang中的接口是隐式的:如果一个类型定义了接口中所有的方法,则该类型自动实现了这个接口,而不需要显式的implements声明。例如,下面是一个接口和实现该接口的例子:

type Shape interface {
    Area() float64
    Perimeter() float64
}

type Rect struct {
    width float64
    height float64
}

func (r Rect) Area() float64 {
    return r.width * r.height
}

func (r Rect) Perimeter() float64 {
    return 2 * (r.width + r.height)
}
Copier après la connexion

在这个例子中,我们定义了一个名为Shape的接口,并为其定义了两个方法:AreaPerimeter。我们还定义了一个名为Rect的矩形类型,并实现了Shape接口的两个方法。这意味着Rect类型自动实现了Shape接口。

最后,我们可以创建一个Shape接口类型的变量,然后向其分配一个Rect类型的值。在这种情况下,我们可以调用Shape接口的AreaPerimeter

Par exemple, ce qui suit est une fonction utilisée pour calculer la somme de deux nombres :

var s Shape
s = Rect{width: 10, height: 5}
fmt.Println(s.Area())       //输出结果为50
fmt.Println(s.Perimeter())  //输出结果为30 
Copier après la connexion
L'appel de la fonction est également très simple, il suffit de fournir le nom de la fonction et les paramètres : # 🎜🎜#rrreee#🎜🎜#2. Définition et utilisation des méthodes#🎜🎜##🎜🎜#Les méthodes en Golang sont très similaires aux fonctions, mais elles sont associées à un certain type ou variable. Les méthodes sont généralement utilisées pour modifier ou renvoyer les propriétés d’une structure, d’une interface ou d’un autre type. La syntaxe de base d'une méthode est la suivante : #🎜🎜#rrreee#🎜🎜#Où, (t type) indique que la méthode est associée au type t. Dans le code du corps de la méthode, nous pouvons accéder aux propriétés et méthodes du type via t. Semblables aux fonctions, les méthodes peuvent également définir un récepteur, c'est-à-dire l'instance à laquelle la méthode sera attachée. #🎜🎜##🎜🎜#Par exemple, voici un type de rectangle nommé Rect, qui a une méthode Area qui est utilisée pour calculer l'aire du rectangle : #🎜🎜 #rrreee#🎜🎜#Dans cet exemple, nous définissons un type de rectangle nommé Rect, qui possède une propriété width et height . Nous définissons également une méthode appelée Area qui utilise les propriétés du rectangle pour calculer l'aire. Puisque nous utilisons le type rectangle comme récepteur, nous pouvons appeler la méthode Area via son instance : #🎜🎜#rrreee#🎜🎜# 3. Utilisation de paramètres variables #🎜🎜##🎜🎜# Dans Golang, vous pouvez utiliser ... (trois points) pour définir des paramètres variables. Cela signifie qu'une fonction ou une méthode peut prendre n'importe quel nombre de paramètres. Par exemple, ce qui suit est une fonction qui contient des paramètres variadiques : #🎜🎜#rrreee#🎜🎜#Cette fonction accepte un paramètre variadique nommé nums, dont le type est int code>. Nous pouvons appeler cette fonction en passant n'importe quel nombre d'entiers à ce paramètre : #🎜🎜#rrreee#🎜🎜#4 L'utilisation de fermetures #🎜🎜##🎜🎜#Une fermeture en Golang signifie qu'une fonction peut accéder à une variable. défini en dehors de celui-ci persiste même après le retour de la fonction. En effet, les fonctions de Golang sont des fonctions de première classe et peuvent être transmises et utilisées comme des variables. Par exemple, voici un exemple de fermeture simple : #🎜🎜#rrreee#🎜🎜#Dans cet exemple, nous créons une fonction qui renvoie une fonction <code>intSeq. La fonction définit une variable i qui fait partie de la fermeture. La fonction renvoyée est également une fermeture, qui peut accéder à i et l'incrémenter. Nous obtenons une fonction de intSeq, appelons-la nextInt et l'utilisons pour obtenir deux entiers. #🎜🎜##🎜🎜# 5. Utilisation des interfaces #🎜🎜##🎜🎜#Dans Golang, une interface est une déclaration d'un ensemble de méthodes, qui définissent le comportement de certains objets. Contrairement aux langages de programmation tels que Java et C#, les interfaces dans Golang sont implicites : si un type définit toutes les méthodes de l'interface, le type implémente automatiquement l'interface sans avoir besoin d'une instruction implements code> explicite. Par exemple, voici un exemple d'interface et une implémentation de l'interface : #🎜🎜#rrreee#🎜🎜#Dans cet exemple, nous définissons une interface appelée <code>Shape et définissons deux méthodes : Zone et Périmètre. Nous définissons également un type de rectangle nommé Rect et implémentons deux méthodes de l'interface Shape. Cela signifie que le type Rect implémente automatiquement l'interface Shape. #🎜🎜##🎜🎜#Enfin, on peut créer une variable d'interface de type Shape et lui attribuer une valeur de type Rect. Dans ce cas, on peut appeler les méthodes Area et Perimeter de l'interface Shape : #🎜🎜#rrreee#🎜🎜# En résumé As mentionné ci-dessus, les fonctions et méthodes de Golang ont des définitions et des implémentations très flexibles. Nous pouvons écrire des programmes plus puissants et plus flexibles en utilisant des fonctionnalités telles que des arguments variadiques, des fermetures et des interfaces. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal