関数でのポインタの使用
CoddyのGOジャーニー「基礎」セクションの一部 — レッスン 64/109。
関数はポインタを通じて変数を受け取り、変更することができます。これにより、関数は単なるコピーではなく、元の値を変更できるようになります。
ポインタを介して値を変更する関数を作成します:
func main() {
number := 10
fmt.Println("Before:", number)
// numberのアドレスを渡します
doubleValue(&number)
fmt.Println("After:", number)
}
func doubleValue(num *int) {
// ポインタのアドレスにある値を変更します
*num = *num * 2
}出力は、関数によって変更された値を示しています:
Before: 10
After: 20&number を渡すと、関数はポインタを受け取り、元の変数を変更できます。
チャレンジ
初心者このチャレンジでは、関数でポインタを使用する練習をします。文字列へのポインタを受け取り、その文字列の値を大文字に変更する関数を完成させる必要があります。
関数 makeUppercase はすでに定義されています。あなたのタスクは、strings.ToUpper() 関数を使用して、ポインタが指している文字列を変更することです。
チートシート
関数は、コピーではなくメモリ番地を受け取ることにより、ポインタを介して変数を変更できます。
func main() {
number := 10
// & を使用して number のアドレスを渡します
doubleValue(&number)
fmt.Println(number) // Output: 20
}
func doubleValue(num *int) {
// * を使用してポインタのアドレスにある値を変更します
*num = *num * 2
}主要なポインタ構文:
&variable- 変数のアドレスを取得します*pointer- ポインタをデリファレンスして値にアクセス/変更します*type- ポインタ型のパラメータを宣言します
自分で試してみよう
package main
import (
"fmt"
"strings"
)
// makeUppercase は文字列へのポインタを受け取り、その文字列を大文字に変更します
func makeUppercase(strPtr *string) {
// TODO: strings.ToUpper() を使用して、strPtr が指す文字列を変更してください
// ヒント: 文字列の値にアクセスするには、ポインタをデリファレンスする必要があります
? = strings.ToUpper(?)
}
func main() {
// すでに文字列変数があります
message := "hello, world"
// 元のメッセージを表示します
fmt.Printf("Original message: %s\n", message)
// message のアドレスを渡して makeUppercase を呼び出します
makeUppercase(&message)
// 変更されたメッセージを表示します
fmt.Printf("Modified message: %s\n", message)
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。