// package lst_string -- потокобезопасный компонент списка строк для анализа объектов package lst_string import ( "fmt" "strings" "sync" ) // LstString -- потокобезопасный список строк объекта type LstString struct { val []string strControl string // Контрольная строка в исходной строке для анализа block sync.RWMutex } // NewLstString -- возвращает новый потокобезопасный список строк func NewLstString(strControl string) (*LstString, error) { if strControl == "" { return nil, fmt.Errorf("NewLstString(): strControl is empty") } сам := &LstString{ val: make([]string, 0), strControl: strControl, } return сам, nil } // Get -- возвращает список строк для анализа func (сам *LstString) Get() []string { сам.block.RLock() defer сам.block.RUnlock() return сам.val } // Set -- устанавливает список строк для анализа func (сам *LstString) Set(lstString []string) error { сам.block.Lock() defer сам.block.Unlock() if lstString == nil { return fmt.Errorf("LstString.Set(): lstString is nil") } isOk := false for _, strControl := range lstString { if strings.Contains(strControl, сам.strControl) { isOk = true break } } if isOk { сам.val = lstString return nil } // Найти заголовок var strOut string for _, strOut = range lstString { if strings.Contains(strOut, "