Ответы пользователя по тегу Go
  • Почему структура не имплементирует интерфейс?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    Ты возвращаешь указатель на структуру *balance вместо того, чтобы возвращать значение, реализующее интерфейс Monetary - а это не соответствует требованиям интерфейса Account, которые указывают, что метод GetBalance() должен возвращать тип, реализующий интерфейс Monetary.

    type Account interface {
        GetBalance() Monetary
    }
    
    type account struct {
        b Monetary
    }
    
    func (a *account) GetBalance() Monetary {
        return a.b
    }
    
    func NewAccount() *account {
        return &account{
            b: &balance{},
        }
    }
    
    func main() {
        var acc Account = NewAccount()
        fmt.Println(acc)
    }
    Ответ написан
    2 комментария
  • Кросс компиляция syscall?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    Используй syscall.Handle для файла дескриптора fd

    syscall.Sendto(syscall.Handle(fd), data, 0, &syscall.SockaddrInet4{Port: port, Addr: [4]byte{127, 0, 0, 1}})
    ....
    syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
    Ответ написан
  • Как исправить ошибку с Valchan горутины?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    Ошибка связана с тем, что вы пытаетесь отправить данные по каналу valChan, но все горутины уже завершили свою работу.

    func scanFiles(file1, file2 *bufio.Scanner, config Config) {
        scanWg := new(sync.WaitGroup)
        scanWg.Add(2)
    
        file1SubStrings := make(map[string]string)
        file2SubStrings := make(map[string]string)
    
        go func() {
            var substr []string
            for file1.Scan() {
                substr = strings.Split(file1.Text(), ":")
                if len(substr) > 0 {
                    file1SubStrings[substr[1]] = substr[0]
                }
            }
            scanWg.Done()
        }()
    
        go func() {
            var substr []string
            for file2.Scan() {
                substr = strings.Split(file2.Text(), ":")
                if len(substr) > 0 {
                    file2SubStrings[substr[0]] = substr[1]
                }
            }
            scanWg.Done()
        }()
    
        scanWg.Wait()
    
        if file2SubStrings != nil && file1SubStrings != nil {
            wg := new(sync.WaitGroup)
            valChan := make(chan struct{ k, v string })
    
            for i := 0; i < config.Count_check; i++ {
                wg.Add(1)
                go findIntersections(valChan, file2SubStrings, wg, config)
            }
    
            for k, v := range file1SubStrings {
                valChan <- struct{ k, v string }{k: k, v: v}
            }
    
            close(valChan)
            wg.Wait()
        }
    }
    Ответ написан
  • Как найти сумму двух map-ов в Golang?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    Самый очевидный вариант
    for k, v := range z {
        x[k] += v
    }


    более универсальный
    func sumMaps(maps ...map[types.Category]int) map[types.Category]int {
        result := make(map[types.Category]int)
    
        // складываем значения из всех map-ов
        for _, m := range maps {
            for k, v := range m {
                result[k] += v
            }
        }
    
        return result
    }

    result := sumMaps(map1, map2, map3)

    Или через Fan-in.
    Ответ написан
    Комментировать