Menu
Coddy logo textTech

まとめ:連絡帳アプリ

CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 18/107。

challenge icon

チャレンジ

簡単

この章で学んだカスタム型、ネストされた構造体、構造体タグ、そしてゼロ値といったすべての概念を組み合わせた、連絡先管理システムを構築しましょう。

コードは2つのファイルに分けて構成します:

  • contact.go: 意味のあるカスタム型と適切なJSONフォーマットを使用して、連絡先帳のデータモデルを定義します:
    • コードの自己文書化を促進するために、stringをベースにしたカスタム型 PhoneEmail を作成します。
    • StreetCityCountry フィールドを持つ Address 構造体を定義し、それぞれに適切なJSONタグを付与します。
    • Name (string)、Phone (作成した Phone 型)、Email (作成した Email 型)、および Address (ネストされた構造体) を含む Contact 構造体を定義します。phoneemail が空の場合は出力されないようにJSONタグを使用してください。
  • main.go: 入力から連絡先情報を読み取り、Contact インスタンスを作成し、フォーマットされたJSONとして出力します。一部の連絡先には不足している情報があるかもしれませんが、ゼロ値と omitempty を使って適切に処理してください。

以下の入力が提供されます:

  • 1行目: 連絡先名
  • 2行目: 電話番号(空の場合あり)
  • 3行目: メールアドレス(空の場合あり)
  • 4行目: 通り(Street address)
  • 5行目: 市(City)
  • 6行目: 国(Country)

インデントには2つのスペースを使用し、json.MarshalIndent を使用してください。結果のJSON文字列を出力します。

例えば、名前が Alice Smith、電話番号なし、メールが alice@example.com、通りが 123 Main St、市が Boston、国が USA の連絡先が与えられた場合、出力は以下のようになります:

{
  "name": "Alice Smith",
  "email": "alice@example.com",
  "address": {
    "street": "123 Main St",
    "city": "Boston",
    "country": "USA"
  }
}

電話番号が空だったため、phone フィールドが全く表示されていないことに注目してください。これが omitempty タグの効果です!

自分で試してみよう

package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	// 名前を読み込む
	scanner.Scan()
	name := scanner.Text()

	// 電話番号を読み込む(空の場合あり)
	scanner.Scan()
	phone := scanner.Text()

	// メールアドレスを読み込む(空の場合あり)
	scanner.Scan()
	email := scanner.Text()

	// 通り(street)を読み込む
	scanner.Scan()
	street := scanner.Text()

	// 市区町村(city)を読み込む
	scanner.Scan()
	city := scanner.Text()

	// 国(country)を読み込む
	scanner.Scan()
	country := scanner.Text()

	// TODO: 入力値を使用して Contact インスタンスを作成する
	// 各フィールドにカスタム型の Phone と Email を使用する
	// street、city、country を持つネストされた Address 構造体を作成する

	// TODO: json.MarshalIndent を使用して contact を JSON に変換する
	// 接頭辞に "" を、インデントに "  "(スペース2つ)を使用する

	// TODO: JSON 文字列を出力する
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

オブジェクト指向プログラミングのすべてのレッスン