45 lines
824 B
Go
45 lines
824 B
Go
package hw10_program_optimization //nolint:golint,stylecheck
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
"strings"
|
|
|
|
jsoniter "github.com/json-iterator/go"
|
|
)
|
|
|
|
type User struct {
|
|
ID int
|
|
Name string
|
|
Username string
|
|
Email string
|
|
Phone string
|
|
Password string
|
|
Address string
|
|
}
|
|
|
|
type DomainStat map[string]int
|
|
|
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
|
|
|
func GetDomainStat(r io.Reader, domain string) (DomainStat, error) {
|
|
result := make(DomainStat)
|
|
var err error
|
|
var user User
|
|
e := bufio.NewReader(r)
|
|
for {
|
|
line, _, err := e.ReadLine()
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
if err = json.Unmarshal(line, &user); err != nil {
|
|
return DomainStat{}, err
|
|
}
|
|
|
|
if strings.HasSuffix(user.Email, "."+domain) {
|
|
result[strings.ToLower(strings.SplitN(user.Email, "@", 2)[1])]++
|
|
}
|
|
}
|
|
return result, err
|
|
}
|