Go language advanced: funciones, punteros, manejo de errores

1. Función

Las funciones son bloques básicos de código que realizan una tarea. El lenguaje Go al menos tiene una función main(). Puedes dividir diferentes funciones por funciones, lógicamente cada función realiza una tarea específica.

函数声明包括函数名﹑形式参数列表﹑返回值列表(可省略)以及函数体。

func name( parameter-list ) [result-list] {
    body
}
  • La lista de parámetros formal describe los nombres y tipos de parámetros de la función. Estos parámetros sirven como variables locales, inicializadas con el valor proporcionado por la persona que llama al parámetro, o de forma predeterminada con el valor del tipo de parámetro (int 0; cadena " "). Cuando se llama a una función, puede pasar valores a parámetros, que se denominan parámetros reales. La lista de parámetros especifica el tipo de parámetro, el orden y el número de parámetros. Los parámetros son opcionales, lo que significa que la función tampoco puede contener parámetros.
  • Las funciones utilizan parámetros, que se pueden pasar de dos maneras:
  1. Pasar por valor: Pasar por valor significa que al llamar a una función, se pasa una copia de los parámetros reales a la función, de modo que si los parámetros se modifican en la función, los parámetros reales no se verán afectados.
  2. Pasar por referencia: Pasar por referencia significa pasar la dirección de los parámetros reales a la función al llamar a la función, luego la modificación de los parámetros en la función afectará los parámetros reales.
  • La lista de valores de retorno describe el nombre de la variable y el tipo de valor de retorno de la función. Si la función devuelve una variable sin nombre o no tiene valor de retorno, se pueden omitir los paréntesis en la lista de valores de retorno. Si una declaración de función no incluye una lista de valores de retorno, no se devolverá ningún valor después de ejecutar el cuerpo de la función.

2. Función recursiva

Las funciones pueden ser recursivas y llamarse a sí mismas directa o indirectamente en tiempo de ejecución. Cuando usamos la recursividad, los programadores deben establecer condiciones límite; de ​​lo contrario, la recursividad caerá en un bucle infinito.

Ejemplo:

Go语言递归实现阶乘

package main

import "fmt"

func Factorial(n uint64)(result uint64) {
    if (n > 0) {
        result = n * Factorial(n-1)
        return result
    }
    return 1
}

func main() {  
    var i int = 15
    fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
}

El lenguaje Go implementa recursivamente la secuencia de Fibonacci

package main

import "fmt"

func fibonacci(n int) int {
  if n < 2 {
   return n
  }
  return fibonacci(n-2) + fibonacci(n-1)
}

func main() {
    var i int
    for i = 0; i < 10; i++ {
       fmt.Printf("%d\t", fibonacci(i))
    }
}

3. puntero

El puntero en el lenguaje Go es un tipo de datos especial que se utiliza para almacenar la dirección de memoria de una variable. Las variables de puntero pueden apuntar a cualquier tipo de datos, incluidos tipos básicos, estructuras, matrices, funciones, etc.

Debe utilizar símbolos al declarar variables de puntero *, por ejemplo:

var ptr *int

//Indica que se declara un puntero a una variable entera.

 

Las variables de puntero pueden &obtener la dirección de la variable a través de operadores, por ejemplo, asignando la dirección de ptr = &numuna variable entera numa una variable de puntero ptr.

Se puede acceder y modificar el valor de la variable a la que apunta la variable de puntero, y se *puede utilizar el operador para desreferenciar el puntero, por ejemplo, *ptrpara obtener ptrel valor de la variable a la que apunta la variable de puntero. Puede modificar el valor de la variable a la que apunta el operador de desreferencia, por ejemplo, modificar el valor de la variable a la que apunta *ptr = 10la variable de puntero a 10.ptr

Los punteros también se pueden utilizar para pasar parámetros a funciones. Al pasar punteros, se pueden pasar referencias a variables y los valores de las variables se pueden modificar dentro de la función y tener un impacto en el exterior.

Cabe señalar que en el lenguaje Go, los punteros no pueden realizar operaciones ni comparaciones, y no hay operadores de puntero ->. Además, el mecanismo de recolección de basura del lenguaje Go puede administrar automáticamente la memoria, por lo que no es necesario liberar manualmente la memoria a la que apunta el puntero.

4. Manejo de errores

El lenguaje Go proporciona un mecanismo de manejo de errores muy simple a través de la interfaz de error incorporada. El tipo de error es un tipo de interfaz, esta es su definición:

type error interface {
    Error() string
}

Podemos generar mensajes de error en la codificación implementando el tipo de interfaz de error.

Las funciones suelen devolver información de error en el valor de retorno final. Utilice errores.Nuevo para devolver un mensaje de error:

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
    // 实现
}

Supongo que te gusta

Origin blog.csdn.net/weixin_53472334/article/details/132392911
Recomendado
Clasificación