728x90
이번에는 map 에 요소를 추가하는 실습을 한다.
앞서 작성한 myDict.go 파일에 다음 내용을 추가 한다.
var errWordExists = errors.New("That word already exists")
// Add a word to the dictionary
func (d Dictionary) Add(word, def string) error {
// [if style]
_, err := d.Search(word)
if err == errNotFound {
d[word] = def
} else if err == nil {
return errWordExists
}
return nil
// [switch style]
/*
_, err := d.Search(word)
switch err {
case errNotFound:
d[word] = def
case nil:
return errWordExists
}
return nil
*/
}
아래 주석으로 작성한 부분은 switch 문법을 사용할 때의 예시이다.
지금 실행해 볼 예시는 if 구절이다.
Dictionary 에서 같은 이름의 key 가 이미 등록 되어 있으면 error 를 반환하고 그렇지 않으면 값을 추가한다.
Search 메소드가 반환하는 결과 중 err 값만 사용할 것이기 때문에, _ 를 사용해서 무시하도록 했다.
새로 추가한 메소드를 사용하는 'part2_myDict_main.go' 파일을 다음과 같이 작성 했다.
package main
import (
"fmt"
"myDict"
)
func main() {
dictionary := myDict.Dictionary{}
word := "hello"
definition := "Greeting"
// 첫번째 값 추가
err := dictionary.Add(word, definition)
if err != nil {
fmt.Println(err)
}
hello, _ := dictionary.Search(word)
fmt.Println("found", word, "definition:", hello)
// 같은 값을 한번 더 추가해서 결과 확인
err2 := dictionary.Add(word, definition)
if err2 != nil {
fmt.Println(err2)
}
}
예상한 결과가 나온 것을 확인할 수 있다.
이번 실습을 할 때 조금 이상한게 있었다.
그건 Search 나 Add 메소드를 작성할 때 struct 의 receiver 와 같이 * 연산자를 사용하지 않았다는 점이다.
궁금해서 * 연산자를 추가해서 실습해 보았는데, 다음과 같은 오류가 출력 되었다.
invalid operation: d[word] (type *Dictionary does not support indexing)
이것과 관련하여 검색한 내용의 일부를 첨부한다.
You are trying to index on the pointer rather than the map itself. Kind of confusing because usually with pointers vs. values dereferencing is automatic for structs. If your struct is just a map, however, it's only passed in by reference anyway so you don't have to worry about creating methods that act on pointers to avoid copying the entire structure every time. |
728x90
'프로그래밍 언어 > Go' 카테고리의 다른 글
Go 'URL CHECKER & GO ROUTINES' : hitURL, HTTP GET REQUEST (0) | 2021.05.22 |
---|---|
Go 'BANK & DICTIONARY PROJECTS' : Update Delete (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 |
Go 'BANK & DICTIONARY PROJECTS' : Methods part Two (0) | 2021.05.21 |