쉽고 빠른 Go 시작하기(4)

이지수·2022년 10월 20일
0

Backend Loadmap

목록 보기
10/22
post-thumbnail

Dictionary

map을 활용해서 Dictionary type을 만듭니다.
map은 key, value 쌍으로 이루어져 있습니다.

package mydict

type (d Dictionary) map[string]string

Method

map처럼 reference type은 값을 복사해서 사용할 것이기 때문에 포인터를 사용하지 않습니다.

딕셔너리에 필요한 search, add, update, delete 메소드들을 작성합니다.


package mydict

import "errors"

// Dictionary type
type Dictionary map[string]string

var (
	errNotFound   = errors.New("Not Found")
	errWordExists = errors.New("Word Exists")
	errCantUpdate = errors.New("Cant Update Non-existing Word")
	errCantDelete = errors.New("Cant Delete Non-existing Word")
)

//Search for a word
func (d Dictionary) Search(word string) (string, error) {
	value, exists := d[word]	
	if exists {
		return value, nil
	}
	return "", errNotFound
}

// Add a word to the dictionary
func (d Dictionary) Add(word, def string) error {
	_, err := d.Search(word)
	switch err {
	case errNotFound:
		d[word] = def
	case nil:
		return errWordExists
	}
	return nil
}

// Update a word
func (d Dictionary) Update(word, def string) error {
	_, err := d.Search(word)
	switch err {
	case nil:
		d[word] = def
	case errNotFound:
		return errCantUpdate
	}
	return nil
}

// Delete a word
func (d Dictionary) Delete(word string) error {
	_, err := d.Search(word)
	switch err {
	case nil:
		delete(d, word)
	case errNotFound:
		return errCantDelete
	}
	return nil
}

error는 struct와 동일하게 체크해주는 용도로 사용합니다. Go는 exception없이 error를 직접 체크해야 합니다.

0개의 댓글