Menu
Coddy logo textTech

Recapitulação - Agenda de Contatos

Parte da seção Programação Orientada a Objetos do Journey de GO da Coddy. Lição 18 de 107.

challenge icon

Desafio

Fácil

Vamos construir um sistema de agenda de contatos que reúne tipos personalizados, structs aninhadas, struct tags e zero values—todos os conceitos que você dominou neste capítulo.

Você organizará seu código em dois arquivos:

  • contact.go: Defina seu modelo de dados de agenda de contatos com tipos personalizados significativos e formatação JSON adequada:
    • Crie tipos personalizados Phone e Email baseados em string para tornar seu código autodocumentado
    • Defina uma struct Address com os campos Street, City e Country, cada um com as tags JSON apropriadas
    • Defina uma struct Contact contendo Name (string), Phone (seu tipo Phone), Email (seu tipo Email) e Address (struct aninhada). Use tags JSON onde phone e email devem ser omitidos se estiverem vazios
  • main.go: Leia as informações de contato da entrada, crie uma instância de Contact e exiba-a como JSON formatado. Alguns contatos podem ter informações incompletas—deixe que os zero values e o omitempty lidem com isso graciosamente.

As seguintes entradas serão fornecidas:

  • Linha 1: Nome do contato
  • Linha 2: Número de telefone (pode estar vazio)
  • Linha 3: Endereço de e-mail (pode estar vazio)
  • Linha 4: Nome da rua
  • Linha 5: Cidade
  • Linha 6: País

Use json.MarshalIndent com dois espaços para indentação. Imprima a string JSON resultante.

Por exemplo, se for fornecido um contato com o nome Alice Smith, sem telefone, e-mail alice@example.com, rua 123 Main St, cidade Boston e país USA, sua saída deve ser parecida com:

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

Observe como o campo phone não aparece de forma alguma, já que estava vazio—isso é a sua tag omitempty em ação!

Experimente você mesmo

package main

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

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

	// Ler nome
	scanner.Scan()
	name := scanner.Text()

	// Ler telefone (pode estar vazio)
	scanner.Scan()
	phone := scanner.Text()

	// Ler e-mail (pode estar vazio)
	scanner.Scan()
	email := scanner.Text()

	// Ler rua
	scanner.Scan()
	street := scanner.Text()

	// Ler cidade
	scanner.Scan()
	city := scanner.Text()

	// Ler país
	scanner.Scan()
	country := scanner.Text()

	// TODO: Criar uma instância de Contact usando os valores de entrada
	// Use seus tipos personalizados Phone e Email para os respectivos campos
	// Crie a struct Address aninhada com street, city e country

	// TODO: Use json.MarshalIndent para converter o contato para JSON
	// Use "" como prefixo e "  " (dois espaços) como indentação

	// TODO: Imprimir a string JSON
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Go online