기초 연락처 목록
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 66번째.
챌린지
쉬움구조체(structs), 슬라이스(slices), 그리고 함수(functions)가 어떻게 함께 작동하여 연락처 정보를 정리하고 표시하는지 보여주는 연락처 관리 시스템을 만드세요. 이 챌린지는 사용자 정의 데이터 구조를 정의하고, 데이터 컬렉션을 관리하며, 해당 데이터를 조작하는 함수를 구현하는 능력을 테스트합니다.
두 개의 입력을 받게 됩니다:
"name1:phone1:email1,name2:phone2:email2,name3:phone3:email3"형식의 연락처 정보를 포함하는 문자열 (예:"Alice Johnson:555-0123:alice@email.com,Bob Smith:555-0456:bob@email.com,Carol Davis:555-0789:carol@email.com")"name:phone:email"형식의 추가할 새 연락처를 포함하는 문자열 (예:"David Wilson:555-0321:david@email.com")
당신의 과제는 다음과 같습니다:
- 세 개의 문자열 필드
Name,Phone,Email을 가진Contact구조체를 정의합니다. Contact구조체 슬라이스와 새로운Contact를 매개변수로 받아, 연락처가 추가된 새 슬라이스를 반환하는addContact함수를 만듭니다.Contact구조체 슬라이스를 매개변수로 받아 각 연락처의 정보를 출력하는displayContacts함수를 만듭니다.- 첫 번째 입력을 쉼표(,)로 분할하여 개별 연락처 항목을 가져오도록 파싱합니다.
- 각 연락처 항목에 대해 콜론(:)으로 분할하여 이름, 전화번호, 이메일을 추출합니다.
- 파싱된 데이터로
Contact구조체를 생성하고 슬라이스에 저장합니다. - 두 번째 입력을 콜론(:)으로 분할하여 새 연락처를 생성하도록 파싱합니다.
- 애플리케이션 헤더를 표시합니다:
"=== CONTACT MANAGEMENT SYSTEM ===" "Initial contact list:"라는 헤더와 함께displayContacts함수를 사용하여 초기 연락처를 표시합니다.- 추가되는 새 연락처를 표시합니다:
"Adding new contact: [name] ([phone]) - [email]" addContact함수를 사용하여 슬라이스에 새 연락처를 추가합니다."Updated contact list:"라는 헤더와 함께displayContacts함수를 사용하여 업데이트된 연락처를 표시합니다.- 연락처 통계를 표시합니다:
"=== CONTACT STATISTICS ===""Total contacts: [number_of_contacts]""Contacts added this session: 1"
- 완료 메시지를 표시합니다:
"Contact management operations completed successfully"
displayContacts 함수는 각 연락처를 "[index]. [name] - Phone: [phone], Email: [email]" 형식으로 출력해야 하며, 인덱스는 1부터 시작합니다.
입력 문자열을 분할하기 위해 strings 패키지를 사용하고, 형식화된 출력을 위해 fmt 패키지를 사용하세요. 이 챌린지는 데이터 조직을 위한 구조체, 컬렉션을 위한 슬라이스, 코드 조직을 위한 함수를 결합하는 방법을 보여줍니다. 이는 Go 프로그래밍 전반에서 사용되는 기본 패턴입니다.
직접 해보기
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: 여기에 Contact 구조체를 정의하세요
// TODO: 여기에 addContact 함수를 구현하세요
// TODO: 여기에 displayContacts 함수를 구현하세요
func main() {
// 이름의 공백을 적절하게 처리하기 위해 bufio.Scanner를 사용하여 입력을 읽습니다
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
contactsInput := scanner.Text()
scanner.Scan()
newContactInput := scanner.Text()
// TODO: 아래에 코드를 작성하세요
// 연락처 입력을 파싱하고 Contact 구조체를 생성합니다
// 접근하기 전에 parts 슬라이스에 충분한 요소가 있는지 확인해야 합니다
// 새 연락처 입력을 파싱합니다
// 애플리케이션 헤더를 표시합니다
// 초기 연락처를 표시합니다
// 새 연락처를 추가합니다
// 업데이트된 연락처를 표시합니다
// 통계를 표시합니다
// 완료 메시지를 표시합니다
}