package brackets const testVersion = 3 type Stack []rune func (s *Stack) Push(r rune) { *s = append(*s, r) } func (s *Stack) Pop() (r rune) { r, *s = (*s)[len(*s)-1], (*s)[:len(*s)-1] return } func (s *Stack) Len() int { return len(*s) } func Bracket(s string) (bool, error) { var st Stack pair := map[rune]rune{ '}': '{', ']': '[', ')': '(', } for _, v := range s { switch v { case '{', '[', '(': st.Push(v) case '}', ']', ')': if st.Len() == 0 { return false, nil } if r := st.Pop(); r != pair[v] { return false, nil } } } return st.Len() == 0, nil }