Siga las mejores prácticas: ¿Debería utilizar un método o una función?

Una de las decisiones clave al crear un programa Go, entre muchas otras, escómo organizar la funcionalidad del programa.

En particular, en este artículo voy a explicarcuándo debe usar un método y cuándo debe usar una función.

Las dos opciones son bastante similares en su definición. La única diferencia es que un método se adjunta a un tipo:

// function
func something(s string) {}

//methods func (MyType) something(s string) {} func (*MyType) something(s string) {}

Si vienes de un lenguaje orientado a objetos como Ruby, Python o PHP moderno, es posible que tengas la tentación de construir todo tu código alrededor de tipos y métodos, ya que así es como esos lenguajes te obligan a pensar. No hay nada fuera de los objetos y métodos.

Si vienes de unJavaScriptEn segundo plano, podría pensar en los métodos como los métodos de prototipo de objeto, lo que creo que es una buena comparación si proviene de un buen JavaScript anterior a las clases anteriores, mientras que las funciones son solo funciones.

Es una cuestión de estado

Las funciones no dependen del estado de ninguna manera.

Según la definición matemática de una función, siempre que haya algunos parámetros de entrada, los valores de salida siempre serán los mismos.

Por otro lado, los métodos están estrechamente vinculados al tipo al que están asociados, ya que definen su comportamiento y utilizan su valor.

Obtienen algún valor del tipo contra el que están definidos, y si tienen receptores de puntero, manipulan su estado.

Si sus métodos no dependen del estado, probablemente deberían definirse como funciones.

Créditos

Inspirado en la charla de Steve Francia "7 errores comunes en Go y cómo evitarlos":