• Как создать изображение и изменить цвет определённого пикселя используя Golang?

    RavenRage
    @RavenRage
    Я думаю вот эти примеры смогут вам помочь:
    https://github.com/anthonynsimon/bild

    Это подборка алгоритмов по работе с изображениями. Нужно только выбрать наиболее подходящий по задаче и разобрать как он работает.
    Ответ написан
    Комментировать
  • Пожете решить проблему перфекциониста?

    RavenRage
    @RavenRage
    На мой взгляд, тут можно попробовать несколько вариантов. Конечно, каждый из них применим для той или иной ситуации в разной степени. Итак:
    1. Выделение функционала в отдельные пакеты
      Как писали уже в комментариях, это нормальная практика. Например, систему занимающуюся коммуникацией между микросервисами логично вынести в отдельный пакет. И тесты тут действительно хорошо могут помочь. И в идеале, лучше выносить в подобные пакеты редко изменяющийся функционал.

    2. Выделение функционала в микросервисы
      Если какой-то функционал используется в нескольких микросервисах, то возможно его стоит вынести в отдельный независимый микросервис. Однако если эти функции используются часто, то такой микросервис может довольно быстро стать узким местом в системе.

    3. Использование RPC
      Этот пункт больше относится к пожеланию "я должен руками вбить все доступные методы для каждого сервиса". Приведу небольшой пример, чтобы была яснее идея. Представим что есть микросервис отвечающий за работу с пользователями. И мы с ним общаемся чтобы получить инфо о юзерах из других микросервисов. Чтобы вручную не переносить все методы, можно использовать протоколы вроде Protobuf + gRPC. В нем описывается файлик типа users.proto в котором описываем методы и поля:
      message HelloRequest {
        string greeting = 1;
      }
      
      message HelloResponse {
        string reply = 1;
      }
      
      service HelloService {
        rpc SayHello(HelloRequest) returns
        (HelloResponse);
      }

      Когда они компилятся, то получается на выходе go файл подключаемый в проект. В итоге каждый микросервис будет опираться на один стандарт. Бонусом более экономный и быстрый по сравнению с JSON`ом формат.

      Все proto файлы можно хранить при желании хоть в отдельном репозитории. Это будет своего рода стандартом API для коммуникации между микросервисами. На этот счет, кстати, недавно на Хабре вышла интересная статья: https://habrahabr.ru/company/badoo/blog/305888/


    В целом как то так) Будет интересно услышать ваши мысли на этот счет.
    Ответ написан
    Комментировать
  • Как сделать json.Marshal/Unmarshal для сложного мапа?

    RavenRage
    @RavenRage
    Если нужно преобразовывать сложные структуры по какой-то особой логике, то возможно имеет смысл использовать свой метод маршалинга. Вот небольшой грубый пример, но в целом думаю идею сможет донести верно:
    type Person struct {
    	Id int
    	Name string
    }
    
    func (p Person) MarshalJSON() ([]byte, error) {
    	// Your custom logic
    	return []byte(`{"name": "` + p.Name + `"}`), nil	
    }
    
    func main() {
    	user := Person{Id: 1, Name: "Mr.Incognito"}
    	json.NewEncoder(os.Stdout).Encode(user)
    	// Вместо всей структуры выведет только {"name":"Mr.Incognito"}
    }

    Попробовать в сэндбоксе: https://play.golang.org/p/SyVWaDtBR9
    Ответ написан
    Комментировать