관리 메뉴

bright jazz music

Go- map 타입에 메소드 추가하기(Add) 본문

Language/Go

Go- map 타입에 메소드 추가하기(Add)

bright jazz music 2021. 2. 19. 01:10
package myDict

import "errors"

// map은 struct가 아니다. array처럼 타입이다.
// type에도 메소드를 추가할 수 있다. struc에만 추가할 수 있는 것이 아니다.
// type 옆의 Dictionary는 map[string]string의 alias 같은 것임.
//map은 자동으로 *를 사용한다.

//Dictionary Type
type Dictionary map[string]string

var errNotFound = errors.New("Not Found")
var errWordExists = errors.New("That word already exists")

// Search for a word
func (d Dictionary) Search(word string) (string, error) {
	//Dictionary라는 이름의 map에 Search 메소드를 더하는 것이다.
	//이 메소드는 string 타입을 word에 받고, string 또는 error로 반환한다.
	value, exists := d[word]
	if exists {
		return value, nil // 값이 없는 경우 nil 반환
	}
	return "", errNotFound
}

//Add a word to the dictionary
func (d Dictionary) Add(word, def string) error { //추가하려는 단어가 없으면 에러
	_, err := d.Search(word) //definition은 필요 없어서 이그노어
	switch err {
	case errNotFound:
		d[word] = def
	case nil:
		return errWordExists
	}
	return nil

	//if문으로 표현한다면?
	// if err == errNotFound{ //추가하려는 단어가 없다면
	// 	d[word] = def //d[키] = 값
	// } else if err == nil{ // 그 단어가 이미 있다면
	// 	return errWordExists
	// }
	// return nil
}

 

 

메인

 

 

package main

import (
	"fmt"

	"github.com/hojuncha997/learngo/accounts/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)
	}
}


=========

found hello definition:  greeting
That word already exists
Comments