Задать вопрос
Ответы пользователя по тегу Go
  • Как реализовать обмен сообщениями между двумя пользователями на Golang?

    mhthnz
    @mhthnz
    PHP, YII2, Golang, Linux
    Создаете структуру Clients. в ней поля nickname, connect.
    type Client struct {
           ID        int                  // Идентификатор юзера
           Nickname   string             // Никнейм клиента
           Conn 	 *websocket.Conn    // Сокет клиента
    }

    После авторизации клиента на вашем сокет сервере, добавляете его в глобальный массив clients, ну и собственно ловите пакеты сообщений, например в json:
    {"to" : "nickname", "message" : "hello"}
    Дальше циклом пробегаетесь по массиву clients и если ник клиента совпадает с полем to из json, то отправляете ему сообщение.
    P. S. Самое поверхностное описание, без углубления в каналы юзера/сессии/аутентификацию/работы с json
    Ответ написан
  • Условие если N одинаковых элементов в массиве?

    mhthnz
    @mhthnz
    PHP, YII2, Golang, Linux
    package main
    
    import "fmt"
    
    // Структура для сохранения результатов
    type concurrences struct {
    	number int
    	count int
    }
    
    // Функция для инкремента элемента
    func inc(num int) {
    	changed := false
    	for i:=0; i < len(conc); i++  {
    		if conc[i].number == num {
    			conc[i].count++
    			changed = true
    			break
    		}
    	}
    	if !changed {
    		conc = append(conc, concurrences{num, 1})
    	}
    }
    
    var conc = []concurrences{}
    
    // Массив с элементами
    var numbers = []int{1, 2, 6, 2, 1, 9, 0, 3}
    
    func main() {
    
    	for i:=0; i < len(numbers); i++  {
    		inc(numbers[i])
    	}
    
    	// Отдаст элемент и кол-во его вхождений в массив
    	// [{1 2} {2 2} {6 1} {9 1} {0 1} {3 1}]
    	fmt.Println(conc)
    
    	 // N - кол-во вхождений элемента в массив
    	 N := 2
    
    	 // Выводим все элементы которые есть в массиве N раз
    	 for i:=0; i < len(conc); i++ {
    		if conc[i].count == N {
    			fmt.Println(conc[i].number)
    		}
    	 }
    
    }
    Ответ написан
    Комментировать