func StringExtractComment(s string) string {
	p := StringSplitIgnoreEmpty(s, '#')
	if len(p) > 1 {
		return p[len(p)-1]
	}
	return ""
}
StringExtractComment checks if comment is added
package common
import (
	"strings"
)
func StringSplitIgnoreEmpty(s string, separators ...rune) []string {
	f := func(c rune) bool {
		willSplit := false
		for _, sep := range separators {
			if c == sep {
				willSplit = true
				break
			}
		}
		return willSplit
	}
	return strings.FieldsFunc(s, f)
}
func StringSplitWithCommentIgnoreEmpty(s string) (data []string, comment string) {  
	data = []string{}
	singleQuoteActive := false
	doubleQuoteActive := false
	var buff strings.Builder
	for index, c := range s {
		if !singleQuoteActive && !doubleQuoteActive {
			if (c == '#' && index == 0) || (c == '#' && s[index-1] != '\\') {
				if buff.Len() > 0 {
					data = append(data, buff.String())
					buff.Reset()
				}
				index++
				for ; index < len(s); index++ {
					if s[index] != ' ' {
						break
					}
				}
				comment = s[index:]
				return data, comment
			}
			if (c == ' ' && index == 0) || (c == ' ' && s[index-1] != '\\') || c == '\t' {
				if buff.Len() > 0 {
					data = append(data, buff.String())
					buff.Reset()
				}
				continue
			}
		}
		buff.WriteRune(c)
		if c == '"' {
			if doubleQuoteActive {
				if index == 0 || s[index-1] != '\\' {
					doubleQuoteActive = false
				}
			} else if !singleQuoteActive {
				if index == 0 || s[index-1] != '\\' {
					doubleQuoteActive = true
				}
			}
		}
		if c == '\'' {
			if singleQuoteActive {
				singleQuoteActive = false
			} else if !doubleQuoteActive {
				if index == 0 || s[index-1] != '\\' {
					singleQuoteActive = true
				}
			}
		}
	}
	if buff.Len() > 0 {
		data = append(data, buff.String())
	}
	return data, comment
}