Go Bracket
func bracket(s string) int {
	pairs := map[byte]byte{')': '(', ']': '[', '}': '{'}
	stack := make([]byte, 0, len(s))

	for i := 0; i < len(s); i++ {
		c := s[i]
		if open, isClose := pairs[c]; isClose {
			if len(stack) == 0 || stack[len(stack)-1] != open {
				return 0
			}
			stack = stack[:len(stack)-1]
		} else {
			stack = append(stack, c)
		}
	}

	if len(stack) == 0 {
		return 1
	}

	return 0
}

This uses a simple stack approach: open brackets go in, matching closing brackets pop them out.