728x90
이번에는 map 에 저장된 값을 수정하고 삭제하는 실습을 한다.
먼저 'part2_myDict_main.go' 파일을 먼저 작성하고, 'myDict.go' 파일을 작성하는 순서로 진행한다.
이건 마치 TDD 를 하는 느낌이다.
package main
import (
"fmt"
"myDict"
)
func main() {
dictionary := myDict.Dictionary{}
baseWord := "hello"
// 값을 추가
dictionary.Add(baseWord, "First")
// 저장된 값을 수정
err := dictionary.Update(baseWord, "Second")
if err != nil {
fmt.Println(err)
}
// 저장된 값을 조회 한 다음 출력
word, _ := dictionary.Search(baseWord)
fmt.Println(word)
}
내용이 단순해서 코드의 주석만 보고도 어떤 동작을 할지 충분히 예상 가능하다.
다음은 'myDict.go' 에 추가한 Update 코드이다.
var errCantUpdate = errors.New("Cant update non-existing word")
// Update a word
func (d Dictionary) Update(word, definition string) error {
_, err := d.Search(word)
switch err {
case nil:
// 단어를 찾는데 err 가 nil -> 찾는데 성공했으므로 그 값을 업데이트
d[word] = definition
case errNotFound:
// 단어를 찾는데 실패 -> 존재하지 않는 값은 업데이트 할 수 없음
return errCantUpdate
}
return nil
}
값을 수정 하려면, map 에 값이 존재해야 하기 때문에 Search 메소드를 사용해서 확인한다.
다음은 이미 작성한 'part2_myDict_main.go' 의 실행 결과이다.
기대한 대로 'First' 가 'Second' 로 수정되어 출력된 것을 확인할 수 있다.
마지막으로 'myDict.go' 파일에 Delete 메소드를 추가해보자.
// Delete a word
func (d Dictionary) Delete(word string) {
// 값의 존재 여부를 판단해서 error 처리를 할 수도 있다.
// api 에 따르면 delete 메소드는 삭제 할 값이 없다고 오류를 반환하지 않는다.
delete(d, word)
}
이 메소드가 잘 동작하는지 확인하기 위해 'part2_myDict_main.go' 파일을 다음과 같이 수정한다.
package main
import (
"fmt"
"myDict"
)
func main() {
dictionary := myDict.Dictionary{}
baseWord := "hello"
// 값을 추가
dictionary.Add(baseWord, "First")
// 저장된 값을 수정
err := dictionary.Update(baseWord, "Second")
if err != nil {
fmt.Println(err)
}
// 저장된 값을 조회 한 다음 출력
word, _ := dictionary.Search(baseWord)
fmt.Println(word)
fmt.Println()
// 삭제 테스트 코드 작성
fmt.Println("========== 삭제 테스트 시작 ==========")
dictionary.Delete(baseWord)
word, err = dictionary.Search(baseWord)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(word)
}
}
삭제 테스트 코드를 추가하고 실행하면 다음과 같은 결과가 나온다.
여기까지 아주 간단한 Bank Account 와 Dictionary Map 예제를 만들어 보면서 Go 에 익숙해져 보았다.
아직 활용 할 수준은 아니지만 활용하고싶은 언어다.
728x90
'프로그래밍 언어 > Go' 카테고리의 다른 글
Go 'URL CHECKER & GO ROUTINES' : Slow URLChecker, empty map 선언 (0) | 2021.05.22 |
---|---|
Go 'URL CHECKER & GO ROUTINES' : hitURL, HTTP GET REQUEST (0) | 2021.05.22 |
Go 'BANK & DICTIONARY PROJECTS' : Add Method (in map) (0) | 2021.05.21 |
Go 'BANK & DICTIONARY PROJECTS' : Dictionary part One (0) | 2021.05.21 |
Go 'BANK & DICTIONARY PROJECTS' : Finishing Up (0) | 2021.05.21 |