Contacts Book
What?
Let’s follow this tutorial to understand some basic concepts of Golang while creating a command line application to organize our contacts. But first we need to define what features or functions should cover a basic contact managment application.
What fields have a contact?
A contact must store basic personal data to reach somebody; for example: name, phone number and address. This will be our basic contact data. When we refer to a set of data that represents something like a contact for example we call it the Model. So, using that naming convention, our contact data model is:
# Contact
- Name: string
- PhoneNumber: string
- Address: string
What features should we develop?
To make this tool useful, we need to allow the user to Create, Read, Update and Delete a Contact or a CRUD. Also we need to be able to seach a contact. All these features should be accesible from the command line.
Tasks
- Create a contact
- Read a contact
- Update a contact
- Delete a contact
- Seach a contact
- Access all the features with a menu
How?
First we need to capture the contact data form the terminal
package main
import (
	"bufio"
	"fmt"
	"os"
)
func main() {
	CreateContact()
}
func CreateContact() {
	// Create a buffer for reading form the standard input
	reader := bufio.NewReader(os.Stdin)
	// Ask for contact name
	fmt.Print("Enter contact name: ")
	name, _ := reader.ReadString('\n')
	// Ask for contact phone
	fmt.Print("Enter contact phone: ")
	phone, _ := reader.ReadString('\n')
	// Ask for contact address
	fmt.Print("Enter contact address: ")
	address, _ := reader.ReadString('\n')
	fmt.Println("==== Contact summary ====")
	fmt.Println("Name:", name)
	fmt.Println("Phone:", phone)
	fmt.Println("Address:", address)
}
As you can see we call reader.ReadString everytime we want to capture data from the command line or standard input. This method reads from the stdin and fills a buffer until the key Enter or \n once it reads Enter the buffer is moved to a variable.
