func (rule *RuleCamelCase) Validate(value string) (bool, error) {
	for i, c := range value {
		if !unicode.IsLetter(c) && !unicode.IsDigit(c) {
			return false, nil
		}
		if unicode.IsUpper(c) {
			if i == 0 {
				return false, nil
			}
			if unicode.IsDigit(rune(value[i-1])) {
				continue
			}
			if i >= 2 && unicode.IsUpper(rune(value[i-1])) && unicode.IsLower(rune(value[i-2])) {
				continue
			}
			if !unicode.IsLower(rune(value[i-1])) {
				return false, nil
			}
		}
	}
	return true, nil
}
Validate checks if string is camel case
false if rune is no letter and no digit
package main
import (
	"sync"
	"unicode"
)
type RuleCamelCase struct {
	Name string
	*sync.RWMutex
}
func (rule *RuleCamelCase) Init() Rule {
	rule.Name = "camelcase"
	rule.RWMutex = new(sync.RWMutex)
	return rule
}
func (rule *RuleCamelCase) GetName() string {
	rule.Lock()
	defer rule.Unlock()
	return rule.Name
}
func (rule *RuleCamelCase) SetParameters(params []string) error {
	return nil
}