Как вызвать java-библиотеку (класс) из golang [duplicate]

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

3
задан Samuel Lampa 9 December 2013 в 19:41
поделиться

3 ответа

Используйте cgo для вызова кода C, который создает экземпляр JVM, используя API вызова JNI , и вызывается в Java-код с использованием интерфейса JNI. Поскольку goroutines может технически переключаться между собственными потоками, вам, вероятно, придется очень внимательно относиться к тестированию, подключению и отсоединению потоков к JVM при входе и выходе из кода Go и / или дополнении с использованием собственной библиотеки потоков, такой как pthreads.

2
ответ дан Jman 17 August 2018 в 15:50
поделиться

Свяжите свой Java-код с «сервером» и вызовите его с помощью RPC, например «rest / soap / бережливость» и сохраните сервер. Я не знаю ни одной системы, которая автоматизирует это для вас.

3
ответ дан Rick-777 17 August 2018 в 15:50
поделиться
  • 1
    Полезная упаковка для приложений на стороне сервера Java предоставляется через Dropwizard, dropwizard.codahale.com , который объединяет Jetty, Jackson и Jersey для создания высокопроизводительных веб-сервисов REST-ful на Java. Вы создаете «живую» банку, которая включает в себя собственный веб-сервер и все, а затем вызывать его службы через REST / HTTP. Запуск службы требует только запуска JVM один раз, что вы можете сделать с Go. – Rick-777 11 December 2013 в 01:28
  • 2
    Спасибо за подсказки, skyde и @ Rick-777. Наверное, звонки REST приходят на определенную стоимость? Мне нравится, как java вызывает в JPype, по крайней мере, под миллисекундой ... будет ли управлять службой REST http? – Samuel Lampa 11 December 2013 в 18:22
  • 3
    Извините, никаких шансов. Если вам нужен такой быстрый уровень латентности, вы, вероятно, захотите исследовать, используя протокол на заказ через сокет Unix. Такой подход позволит вам сначала использовать текстовое сопоставление, такое как JSON, с целью оптимизации этого бинарного протокола в случае необходимости. – Rick-777 11 December 2013 в 21:50

Вы можете создать класс управления Java на Java, который способен разговаривать с вашей программой Go, и который вы запускаете один раз, и будете делать соответствующие вызовы на другой код Java, когда ваша программа Go запросит их.

0
ответ дан Vitruvius 17 August 2018 в 15:50
поделиться
  • 1
    Любые фрагменты кода или руководство по тому, как это сделать? – Samuel Lampa 11 December 2013 в 18:20
  • 2
    Вы можете использовать любой тип межпроцессного общения. Если ваша программа Go запускает программу Java, вы можете использовать exec.Command golang.org/pkg/os/exec для запуска java -jar и чтения и записи в Stdin и Stdout и в программа java читает и записывает в System.in и System.out – Vitruvius 11 December 2013 в 21:20
Другие вопросы по тегам:

Похожие вопросы: