map을 활용해서 Dictionary type을 만듭니다.
map은 key, value 쌍으로 이루어져 있습니다.
package mydict
type (d Dictionary) map[string]string
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를 직접 체크해야 합니다.