Usando Ponteiros em Funções
Parte da seção Fundamentos do Journey de GO da Coddy — lição 64 de 109.
Funções podem aceitar e modificar variáveis através de ponteiros. Isso permite que as funções alterem o valor original, não apenas uma cópia.
Crie uma função que modifica um valor através de um ponteiro:
func main() {
number := 10
fmt.Println("Before:", number)
// Passa o endereço de number
doubleValue(&number)
fmt.Println("After:", number)
}
func doubleValue(num *int) {
// Modifica o valor no endereço do ponteiro
*num = *num * 2
}A saída mostra o valor alterado pela função:
Before: 10
After: 20Quando passamos &number, a função recebe um ponteiro e pode modificar a variável original.
Desafio
InicianteNeste desafio, você praticará o uso de ponteiros em funções. Você precisa completar uma função que recebe um ponteiro para uma string e modifica o valor da string para ser maiúsculo.
A função makeUppercase já está definida para você. Sua tarefa é modificar a string para a qual o ponteiro aponta usando a função strings.ToUpper().
Folha de consulta
As funções podem modificar variáveis por meio de ponteiros, recebendo o endereço de memória em vez de uma cópia:
func main() {
number := 10
// Passa o endereço de number usando &
doubleValue(&number)
fmt.Println(number) // Saída: 20
}
func doubleValue(num *int) {
// Modifica o valor no endereço do ponteiro usando *
*num = *num * 2
}Sintaxe principal de ponteiros:
&variable- obtém o endereço de uma variável*pointer- desreferencia um ponteiro para acessar/modificar o valor*type- declara um tipo de parâmetro de ponteiro
Experimente você mesmo
package main
import (
"fmt"
"strings"
)
// makeUppercase recebe um ponteiro para uma string e altera a string para letras maiúsculas
func makeUppercase(strPtr *string) {
// TODO: Use strings.ToUpper() para alterar a string para a qual strPtr aponta
// Dica: Você precisa desreferenciar o ponteiro para acessar o valor da string
? = strings.ToUpper(?)
}
func main() {
// Já temos uma variável de string
message := "hello, world"
// Imprime a mensagem original
fmt.Printf("Original message: %s\n", message)
// Chama makeUppercase com o endereço de message
makeUppercase(&message)
// Imprime a mensagem modificada
fmt.Printf("Modified message: %s\n", message)
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores de Comparação e Lógicos
Operadores de Comparação - Parte 1Operadores de Comparação - Parte 2Operador Lógico ANDOperador Lógico OROperador Lógico NOTFundamentos de Precedência de OperadoresRecapitulação - Fazendo Comparações7Fluxo de Controle: Loops
O Loop `for` ExplicadoLoop For - BásicoLoop For - Apenas CondiçãoA Palavra-chave `break`A Palavra-chave `continue`Loops AninhadosRecapitulação - Repetindo Ações2Variáveis e Tipos de Dados Básicos
O que é uma variávelInferência de Tipo com `:=`Inteiros (int)Números de Ponto FlutuanteBooleanosStringsValores ZeroConstantesConvenções de NomenclaturaRecapitulação - Variáveis e Tipos5Entrada/Saída Básica
Saída FormatadaVerbos de FormataçãoImprimindo TiposObtendo Entrada Básica do UsuárioRecapitulação - Entrada e Saída8Funções
Entendendo FunçõesDeclarando uma FunçãoChamando FunçõesParâmetros de FunçãoRetornando um Único ValorRetornando Múltiplos ValoresValores de Retorno NomeadosFundamentos de Escopo de FunçãoRecapitulação - Criando Código Reutilizável3Operadores Básicos
Operadores AritméticosOperador de DivisãoO Operador MóduloOperador de AtribuiçãoOperadores de Atribuição CompostaIncremento e DecrementoRecapitulação - Cálculos6Fluxo de Controle: Condicionais
A Instrução `if`A Palavra-chave `else`A Palavra-chave `else if`Sombreamento de Variáveis no `if`Inicializando VariáveisA Instrução `switch`Switch com ExpressõesSwitch sem ExpressãoA Palavra-chave `fallthrough`Recapitulação - Tomando Decisões