Em Go, funções são blocos de código que executam tarefas específicas, que podem ser reutilizadas em todo o programa para economizar memória, melhorar a legibilidade e economizar tempo. As funções Golang podem ou não retornar um valor ao chamador.

Coisas que você precisa saber sobre funções em Golang
Por exemplo:
package main
import "fmt"
// multiply() nhân 2 số nguyên và trả về kết quả
func multiply(a, b int) int {
return a * b
}
func main() {
result := multiply(5, 10)
fmt.Printf("multiplication: %d", result)
}
Resultado:
multiplication: 50
Sintaxe de função em Golang
func function_name(Parameter-list)(Return_type) {
// function body...
}
Declaração de função
Em Go, uma função é declarada com a palavra-chave func, seguida de um nome, parâmetros e tipo de retorno opcional.
Sintaxe
func function_name(Parameter-list)(Return_type) {
// function body...
}
Exemplo de função multiplicação
func multiply(a, b int) int {
return a * b
}
func: Palavra-chave para declarar uma função.
function_name: O nome da função, por exemplo multiplicar.
Lista de parâmetros: a, b int — os parâmetros junto com seus tipos.
Return_type: int especifica o tipo de retorno.
Função de chamada
Para usar uma função, basta chamá-la pelo seu nome com quaisquer argumentos necessários. Aqui, multiply(5, 10) chama a função com 5 e 10 como argumentos.
Por exemplo
result := multiply(5, 10)
fmt.Printf("Result of multiplication: %d", result)
Argumentos de função
Go suporta duas maneiras de passar parâmetros para funções: Chamada por valor e Chamada por referência. Por padrão, Go usa chamada por valor, o que significa que os valores são copiados e as alterações dentro da função não afetam as variáveis do chamador.
Chamada por valor
Na chamada por valor, os valores dos argumentos são copiados para os parâmetros da função, portanto alterações na função não afetam as variáveis originais.
Por exemplo:
package main
import "fmt"
func multiply(a, b int) int {
a = a * 2 // chỉnh sửa bên trong hàm này
return a * b
}
func main() {
x := 5
y := 10
fmt.Printf("Before: x = %d, y = %d\n", x, y)
result := multiply(x, y)
fmt.Printf("multiplication: %d\n", result)
fmt.Printf("After: x = %d, y = %d\n", x, y)
}
Resultado:
Before: x = 5, y = 10
multiplication: 100
After: x = 5, y = 10
Ligue por referência
Na chamada por referência, ponteiros são usados para que as alterações dentro da função sejam refletidas nas variáveis do chamador.
Por exemplo:
package main
import "fmt"
func multiply(a, b *int) int {
*a = *a * 2 // chỉnh sửa giá trị của a ở địa chỉ bộ nhớ của nó
return *a * *b
}
func main() {
x := 5
y := 10
fmt.Printf("Before: x = %d, y = %d\n", x, y)
result := multiply(&x, &y)
fmt.Printf("multiplication: %d\n", result)
fmt.Printf("After: x = %d, y = %d\n", x, y)
}
Resultado
Before: x = 5, y = 10
multiplication: 100
After: x = 10, y = 10