2022-05-06 06:53:44 +07:00
|
|
|
---
|
2022-07-31 12:37:17 +07:00
|
|
|
title: '#90DaysOfDevOps - ポインタを使ったユーザー入力の取得と完成したプログラム - 12日目'
|
2022-05-06 06:53:44 +07:00
|
|
|
published: false
|
2022-07-31 12:37:17 +07:00
|
|
|
description: 90DaysOfDevOps - ポインタを使ったユーザー入力の取得と完成したプログラム
|
2022-05-06 06:53:44 +07:00
|
|
|
tags: 'devops, 90daysofdevops, learning'
|
|
|
|
cover_image: null
|
|
|
|
canonical_url: null
|
|
|
|
id: 1048864
|
|
|
|
---
|
2022-07-31 12:37:17 +07:00
|
|
|
## ポインタを使ったユーザー入力の取得と完成したプログラム
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
昨日([Day 11](day11.md)) 、私たちは自己完結した最初のGoプログラムを作成しました。ユーザーの入力を得たい部分はコード内で変数として作成し、値を与えました。今度は、変数に終了メッセージの値を与えるために、ユーザーに入力を求めたいと思います。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
## ユーザー入力の取得
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
その前に、もう一度アプリケーションを見て、ユーザーの入力を得る前にテストとして必要な変数を調べてみましょう。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
昨日、私たちは次のようなコードを書き上げました [day11_example4.go](Go/day11_example4.go) 私たちは手動で `challenge, daystotal, dayscomplete` 変数と定数をコードで定義しています。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
次に、`TwitterName` という新しい変数を追加しましょう。この新しいコードは [day12_example1.go](Go/day12_example1.go) にあります。このコードを実行すると、次のような結果が得られます。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
|
|
|
![](Images/Day12_Go1.png)
|
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
現在12日目ですが、毎日 `dayscomplete` を変更して、毎日コードをコンパイルする必要があります。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
ユーザーの入力を得て、名前と完了した日数の値を取得したいと思います。これを行うには、`fmt`パッケージの別の関数を使用します。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
fmt` パッケージについて復習すると、以下のような様々な関数があります。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
- メッセージの印刷
|
|
|
|
- ユーザーの入力を収集する
|
|
|
|
- ファイルへの書き込み
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
これは、変数の値を代入する代わりに、ユーザーに入力を求めるものです。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
|
|
|
```
|
|
|
|
fmt.Scan(&TwitterName)
|
|
|
|
```
|
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
変数の前に `&` を使っていることに注意してください。これはポインタと呼ばれるもので、次のセクションで説明します。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
コード [day12_example2.go](Go/day12_example2.go) では、ユーザーに二つの変数、 `TwitterName` と `DaysCompleted` の入力を求めていることがわかります。
|
|
|
|
|
|
|
|
プログラムを実行してみると、上記の2つの変数が入力されていることがわかります。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
|
|
|
![](Images/Day12_Go2.png)
|
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
さて、ユーザーからの入力を得てメッセージを表示したのはいいのですが、挑戦があと何日残っているかをプログラムに表示させるのはどうでしょう。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
そのために `remainingDays` という変数を作成し、コード内で `90` というハードバリューを設定しました。この値を変更して、ユーザから `DaysCompleted` という入力を得たときに残りの日数を表示する必要があります。このためには、この単純な変数の変更を行います。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
|
|
|
```
|
|
|
|
remainingDays = remainingDays - DaysCompleted
|
|
|
|
```
|
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
完成したプログラムはこちら [day12_example2.go](Go/day12_example3.go) で見ることができます。
|
|
|
|
|
|
|
|
このプログラムを実行すると、ユーザー入力と `remainingDays` の値に基づいて簡単な計算が行われていることがわかります。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
|
|
|
![](Images/Day12_Go3.png)
|
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
## ポインターとは(特殊変数)
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
ポインタとは、他の変数のメモリアドレスを指し示す(特殊な)変数のことです。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
これについては、[geeksforgeeks](https://www.geeksforgeeks.org/pointers-in-golang/)にすばらしい説明があります。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
ここではコードを単純化して、printコマンドの前に`&`をつけるかつけないかで、ポインタのメモリアドレスを表示してみましょう。このコード例をここに追加しました。[day12_example4.go](Go/day12_example4.go)です。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
以下は、このコードを実行しているところです。
|
2022-05-06 06:53:44 +07:00
|
|
|
|
|
|
|
![](Images/Day12_Go4.png)
|
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
## リソース
|
2022-05-06 06:53:44 +07:00
|
|
|
|
|
|
|
- [StackOverflow 2021 Developer Survey](https://insights.stackoverflow.com/survey/2021)
|
|
|
|
- [Why we are choosing Golang to learn](https://www.youtube.com/watch?v=7pLqIIAqZD4&t=9s)
|
|
|
|
- [Jake Wright - Learn Go in 12 minutes](https://www.youtube.com/watch?v=C8LgvuEBraI&t=312s)
|
|
|
|
- [Techworld with Nana - Golang full course - 3 hours 24 mins](https://www.youtube.com/watch?v=yyUHQIec83I)
|
|
|
|
- [**NOT FREE** Nigel Poulton Pluralsight - Go Fundamentals - 3 hours 26 mins](https://www.pluralsight.com/courses/go-fundamentals)
|
|
|
|
- [FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners](https://www.youtube.com/watch?v=YS4e4q9oBaU&t=1025s)
|
|
|
|
- [Hitesh Choudhary - Complete playlist](https://www.youtube.com/playlist?list=PLRAV69dS1uWSR89FRQGZ6q9BR2b44Tr9N)
|
|
|
|
|
2022-07-31 12:37:17 +07:00
|
|
|
13日目](day13.md)でお会いしましょう。
|
2022-05-06 06:53:44 +07:00
|
|
|
|