Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GO言語-Java対応チートシート-用語編-

ymgc
October 02, 2024

 GO言語-Java対応チートシート-用語編-

ymgc

October 02, 2024
Tweet

More Decks by ymgc

Other Decks in Programming

Transcript

  1. 言語構造 用語 Goにおける説明 Javaでいうと package コードをグループ化する単位 パッケージ func 関数を定義する メソッド

    struct カスタムデータ型を定義する クラス interface メソッドのセットを定義する インターフェース type 新しい型を定義する クラス, インターフェース 関連リンク: Go言語の基本構文 ▶ 4
  2. 並行処理 用語 Goにおける説明 Javaでいうと Goroutine 軽量スレッド Thread channel Goroutine間の通信に使用 BlockingQueue

    select 複数のチャネル操作を待機 Java NIO Selector sync.Mutex 相互排他ロック synchronized, Lock sync.WaitGroup 複数のGoroutineの完了を待機 CountDownLatch 関連リンク: Goの並行処理 ▶ 5
  3. エラー処理 用語 Goにおける説明 Javaでいうと error interface エラーを表現するインターフェース Exception panic/recover 例外的な状況の処理

    try-catch defer 関数終了時に実行される処理を定義 try-finally 関連リンク: Goのエラー処理 ▶ 6
  4. データ構造 用語 Goにおける説明 Javaでいうと slice 可変長配列 ArrayList map キーと値のペアを格納する HashMap

    array 固定長配列 配列 make スライス、マップ、チャネルの作成 new new ポインタを返す new 関連リンク: Goのスライスの使用法 ▶ 7
  5. ビルドとパッケージ管理 用語 Goにおける説明 Javaでいうと Go mod Goの依存関係管理ツール Maven, Gradle Go

    build Goプログラムをコンパイルする javac Go run Goプログラムをコンパイルして実行する java Go get 外部パッケージをダウンロードしてインストールする Maven依存関係のダウンロード 関連リンク: Go Modules入門 ▶ 9
  6. テストとプロファイリング 用語 Goにおける説明 Javaでいうと Go test Goの標準テストフレームワーク JUnit testify アサーションライブラリ

    JUnit Assertions Go vet Goの標準静的解析ツール SonarQube pprof Goの標準プロファイリングツール JProfiler 関連リンク: Goのテスト入門 ▶ 10
  7. Webフレームワークとサービス 用語 Goにおける説明 Javaでいうと gin 高性能なWebフレームワーク Spring Boot echo 最小限のWebフレームワーク

    Spark Java gRPC Googleが開発したRPCフレームワーク Java RMI net/http 標準HTTPクライアント/サーバー java.net.HttpURLConnection 関連リンク: Gin Web Framework ▶ 11
  8. IDE・エディタ 用語 Goにおける説明 Javaでいうと GoLand JetBrains社のGo用IDE IntelliJ IDEA Visual Studio

    Code MicrosoftのコードエディタでGoプラグインを使用 同じく vim-Go Vim用のGoプラグイン Eclipse Vrapper 関連リンク: Visual Studio CodeでのGo開発 ▶ 14
  9. デバッグとトレース 用語 Goにおける説明 Javaでいうと Delve Goのデバッガー JDB, IntelliJ Debugger Go

    tool trace Goの実行トレースツール Java Flight Recorder 関連リンク: DelveでのGoのデバッグ ▶ 15
  10. デスクトップGUI 用語 Goにおける説明 Javaでいうと fyne クロスプラットフォームGUIツールキット JavaFX gio 即時モードGUIフレームワーク Swing

    Gotk3 GTK3のGoバインディング SWT 関連リンク: Fyne - クロスプラットフォームGUIフレームワーク ▶ 17
  11. リレーショナルデータベース 用語 Goにおける説明 Javaでいうと database/sql Goの標準データベースインターフェース JDBC sqlx 拡張されたデータベースライブラリ MyBatis

    GoRM GoのORMライブラリ Hibernate pgx PostgreSQL用の高性能ドライバー PostgreSQL JDBC Driver 関連リンク: Goのdatabase/sqlパッケージ使用法 ▶ 20
  12. NoSQL データベース 用語 Goにおける説明 Javaでいうと Go-redis Redisクライアント Jedis mGo MonGoDBドライバー

    MonGoDB Java Driver Gocb Couchbaseクライント Couchbase Java SDK 関連リンク: Go-redis - Goの高性能Redisクライアント ▶ 21
  13. 基本的なファイル操作 用語 Goにおける説明 Javaでいうと os.Open ファイルを開く FileInputStream os.Create ファイルを作成する FileOutputStream

    bufio.NewReader バッファリングされたリーダーを作成 BufferedReader bufio.NewWriter バッファリングされたライターを作成 BufferedWriter 関連リンク: Goのファイル操作入門 ▶ 23
  14. 高レベルのファイル操作 用語 Goにおける説明 Javaでいうと ioutil.ReadFile ファイルの内容を全て読み込む Files.readAllBytes() ioutil.WriteFile ファイルに内容を書き込む Files.write()

    filepath.Walk ディレクトリを再帰的に走査 Files.walkFileTree() os.MkdirAll ディレクトリを再帰的に作成 Files.createDirectories() 24
  15. ファイルシステム操作 用語 Goにおける説明 Javaでいうと os.Stat ファイル情報を取得 Files.getAttribute() os.Chmod ファイルの権限を変更 Files.setPosixFilePermissions()

    os.Rename ファイル名を変更 Files.move() os.Remove ファイルを削除 Files.delete() 関連リンク: Goのos/filepathパッケージ ▶ 25
  16. 型システム 用語 Goにおける説明 Javaでいうと 静的型付け コンパイル時に型チェックを行う 同様 型推論 var キーワードを使用して型を推論

    var キーワード(Java 10以降) インターフェース 暗黙的な実装 明示的な実装(implements キーワード) ジェネリクス Go 1.18以降でサポート 広範にサポート nil ポインタ、インターフェース等のゼロ値 null 関連リンク: Goの型システム ▶ 27
  17. メモリ管理 用語 Goにおける説明 Javaでいうと ガベージコレクション 自動メモリ管理 同様 escape analysis スタック割り当ての最適化

    同様(JVMで実行) 値型とポインタ型 明示的に区別 参照型のみ(プリミティブ型を除く) 関連リンク: Goのメモリモデル ▶ 28
  18. 並行処理モデル 用語 Goにおける説明 Javaでいうと CSP Goroutineとchannelによる通信順序プロセス Actor model(Akkaなど) スケジューラ Go

    runtime によるGoroutineのスケジューリング JVM のスレッドスケジューラ sync.Pool 一時オブジェクトのプール ThreadLocal, オブジェクトプール 関連リンク: Goの並行処理パターン ▶ 29
  19. 入出力処理 用語 Goにおける説明 Javaでいうと io.Reader / io.Writer 入出力のインターフェース java.io.InputStream /

    OutputStream bufio バッファリングされたI/O java.io.BufferedReader / BufferedWriter fmt フォーマット付きI/O System.out.printf, String.format 関連リンク: Goのfmtパッケージ ▶ 31
  20. 文字列処理 用語 Goにおける説明 Javaでいうと strings パッケージ 文字列操作ユーティリティ java.lang.String, StringUtils (Apache

    Commons) strconv パッケージ 文字列変換 Integer.parseInt, Double.parseDouble など regexp パッケージ 正規表現 java.util.regex パッケージ 関連リンク: Goのstringsパッケージ ▶ 32
  21. コレクション 用語 Goにおける説明 Javaでいうと slice 動的配列 ArrayList map ハッシュテーブル HashMap

    list パッケージ 双方向リスト LinkedList ring パッケージ 循環リスト - (カスタム実装が必要) 33
  22. 時間と日付 用語 Goにおける説明 Javaでいうと time パッケージ 時間と期間の操作 java.time パッケージ time.Time

    時刻を表す java.time.Instant, LocalDateTime time.Duration 期間を表す java.time.Duration 関連リンク: Goのtimeパッケージ ▶ 34
  23. ビルドツール 用語 Goにおける説明 Javaでいうと Go build ソースコードのコンパイルとリンク javac Go install

    バイナリのビルドとインストール Maven install Go generate ソースコード生成 Annotation Processor 関連リンク: Goのコマンドドキュメント ▶ 36
  24. 依存関係管理 用語 Goにおける説明 Javaでいうと Go.mod モジュール定義ファイル pom.xml, build.gradle Go get

    依存関係のダウンロード Maven/Gradle の依存関係解決 Go mod tidy 依存関係の整理 Maven/Gradle の依存関係解決 関連リンク: Go Modulesのチュートリアル ▶ 37
  25. コード品質 用語 Goにおける説明 Javaでいうと Go fmt コードフォーマッタ Checkstyle Go vet

    静的解析ツール SpotBugs, SonarQube Golangci-lint 統合リントツール PMD, Checkstyle, SpotBugs の組み合わせ 関連リンク: Golangci-lintの使い方 ▶ 38
  26. エラー処理 用語 Goにおける説明 Javaでいうと 複数返り値によるエラー返却 func DoSomething() (Result, error) チェック例外、Optional

    errors.Is / errors.As エラーの種類の判定 instanceof による例外の型チェック カスタムエラー struct による独自エラー型の定義 カスタム例外クラス 関連リンク: Goのエラー処理ベストプラクティス ▶ 40
  27. 並行処理パターン 用語 Goにおける説明 Javaでいうと fan-out, fan-in Goroutineとchannelを使用 ExecutorService, CompletableFuture worker

    pool Goroutineプール ThreadPoolExecutor Context リクエストスコープの値と取り消し ThreadLocal, 取り消し可能なFuture 関連リンク: Goの並行処理パターン ▶ 41
  28. メモリ最適化 用語 Goにおける説明 Javaでいうと 構造体のフィールド順序 メモリアライメントを考慮 @Contended アノテーション sync.Pool オブジェクトの再利用

    オブジェクトプール スライスの事前割り当て make([]T, 0, capacity) ArrayList のキャパシティ指定 関連リンク: Goのメモリ最適化テクニック ▶ 43
  29. 並行処理の最適化 用語 Goにおける説明 Javaでいうと GoMAXPROCS 使用するCPU数の制御 Runtime.getRuntime().availableProcessors() Goroutine の適切な利用 軽量なため多用可能

    スレッドプールの適切なサイジング チャネルのバッファリング バッファ付きチャネル BlockingQueue のキャパシティ指定 関連リンク: Goの並行処理のパフォーマンスチューニング ▶ 44
  30. プロファイリングとベンチマーク 用語 Goにおける説明 Javaでいうと Go test -bench ベンチマークテスト JMH (Java

    Microbenchmark Harness) pprof CPUとメモリのプロファイリング Java Flight Recorder, VisualVM trace 実行トレース Java Flight Recorder 関連リンク: Goのプロファイリングとトレーシング ▶ 45
  31. 暗号化 用語 Goにおける説明 Javaでいうと crypto パッケージ 暗号化アルゴリズムの実装 java.security, javax.crypto パッケージ

    crypto/tls TLS接続の実装 javax.net.ssl パッケージ crypto/rand 暗号学的に安全な乱数生成 java.security.SecureRandom 関連リンク: Goの暗号化パッケージ ▶ 47
  32. 認証・認可 用語 Goにおける説明 Javaでいうと JWT-Go JSONウェブトークンの実装 JJWT (Java JWT) oauth2

    パッケージ OAuth 2.0クライアントの実装 Spring Security OAuth bcrypt パスワードハッシュ化 Spring Security の BCryptPasswordEncoder 関連リンク: JWT-Goライブラリ ▶ 48
  33. HTTP処理 用語 Goにおける説明 Javaでいうと net/http パッケージ HTTPクライアント/サーバーの実装 java.net.HttpURLConnection, Servlets http.Handler

    インターフェース HTTPリクエストハンドラ Servlet http.Client HTTPクライアント java.net.http.HttpClient (Java 11+) 関連リンク: Goのnet/httpパッケージ ▶ 50
  34. ソケットプログラミング 用語 Goにおける説明 Javaでいうと net.Dial ネットワーク接続の確立 Socket net.Listen ネットワークリスナーの作成 ServerSocket

    net.Conn インターフェース ネットワーク接続の抽象化 Socket 関連リンク: Goのnetパッケージ ▶ 51
  35. データシリアライゼーション 用語 Goにおける説明 Javaでいうと encoding/json JSON処理 Jackson, Gson encoding/xml XML処理

    JAXB encoding/Gob Goバイナリ形式 Java Serialization protobuf Protocol Buffersの実装 Protocol Buffers for Java 関連リンク: Goのencoding/jsonパッケージ ▶ 53
  36. メッセージングシステム 用語 Goにおける説明 Javaでいうと Go-redis Redisクライアント Jedis, Lettuce sarama Apache

    Kafkaクライアント Apache Kafka Clients amqp RabbitMQクライアント Spring AMQP 関連リンク: Go-redisライブラリ ▶ 54
  37. ベンチマークとプロファイリング 用語 Goにおける説明 Javaでいうと testing.B ベンチマークテスト JMH (Java Microbenchmark Harness)

    pprof プロファイリングツール Java Flight Recorder, YourKit 関連リンク: Goのベンチマークテスト ▶ 58
  38. コンテナ化 用語 Goにおける説明 Javaでいうと 軽量バイナリ シングルバイナリでデプロイ可能 Fat JAR, Spring Boot

    Executable JAR scratch イメージ 最小限のDockerイメージ JRE-alpine イメージ 関連リンク: GoアプリケーションのDockerfile最適化 ▶ 60
  39. マイクロサービス 用語 Goにおける説明 Javaでいうと Go-micro マイクロサービスフレームワーク Spring Boot, Micronaut Go-kit

    マイクロサービスツールキット Spring Cloud consul-api サービスディスカバリ (Consul) Spring Cloud Consul 関連リンク: Go-microフレームワーク ▶ 61
  40. クラウドサービス連携 用語 Goにおける説明 Javaでいうと aws-sdk-Go AWS SDK AWS SDK for

    Java Google-cloud-Go Google Cloud SDK Google Cloud Java azure-sdk-for-Go Azure SDK Azure SDK for Java 関連リンク: AWS SDK for Go ▶ 62
  41. パッケージマネージャ 用語 Goにおける説明 Javaでいうと Go get 依存関係のダウンロードとインストール Maven, Gradle Go

    mod モジュール管理システム Maven, Gradle dep (非推奨) 以前の依存関係管理ツール Apache Ivy 関連リンク: Go Modulesの使い方 ▶ 64
  42. コミュニティとリソース 用語 Goにおける説明 Javaでいうと Go Playground オンラインコード実行環境 JDoodle Awesome Go

    Goリソースのキュレーションリスト Awesome Java Go Forum 公式ディスカッションフォーラム Stack Overflow, Reddit r/java 関連リンク: Go Playground ▶ 65
  43. 人気のあるフレームワークとライブラリ 用語 Goにおける説明 Javaでいうと gin Webフレームワーク Spring Boot Gorm ORM

    Hibernate cobra CLIアプリケーションフレームワーク picocli viper 設定管理 Spring Boot Externalized Configuration 関連リンク: Gin Web Framework ▶ 66
  44. 設計原則 観点 Go Java 設計思想 シンプルさと実用性重視 汎用性と堅牢性重視 コード スタイル 強制的なフォーマット(Go

    fmt) コーディング規約はあるが強制ではない エラー処理 明示的なエラー返却 例外機構 並行処理モデル CSP(Communicating Sequential Processes) 共有メモリとロック 型システム 構造的型付け 名前的型付け メモリ管理 ガベージコレクション(シンプルで予測可能) ガベージコレクション(複雑で高度) 関連リンク: Goの設計哲学 ▶ 68
  45. 型システムと総称型 機能 Go Java 総称型 1.18以降でサポート(シンプルな実装) 完全サポート(複雑な実装) 型推論 広範囲(var キーワード、:=

    演算子) 限定的(var キーワード、ラムダ式) null安全性 ポインタ型のみnilable Optional型の使用推奨 共変性・反変性 未サポート ワイルドカード(? extends, ? super)でサポート 関連リンク: Goのジェネリクス入門 ▶ 69
  46. 並行処理と並列処理 機能 Go Java 基本単位 Goroutine(軽量) Thread(比較的重い) 通信手段 channel 共有メモリ、java.util.concurrent

    同期プリミティブ sync パッケージ synchronized、java.util.concurrent 並列処理 GoMAXPROCS ForkJoinPool、ParallelStream 関連リンク: Goの並行処理モデル ▶ 70
  47. メモリ管理とパフォーマンス 機能 Go Java メモリモデル 値型とポインタ型 すべてがオブジェクト(プリミティブ型を除く) GCアルゴリズム 並行トライカラーマーク&スイープ 複数のアルゴリズム(G1GC、ZGC等)

    メモリ割り当て スタックとヒープ(エスケープ解析) 主にヒープ(JITによる最適化) パフォーマンスチューニング GoGC、GC Trace JVM引数、GCログ解析 関連リンク: Goのメモリモデル ▶ 71
  48. Goの特徴 Javaの特徴 1. シンプルで読みやすい構文 2. 高速なコンパイルと実行 3. 組み込みの並行処理サポート 4. 強力な標準ライブラリ

    1. プラットフォーム非依存性(Write Once, Run Anywhere) 2. 豊富なエコシステムと長年の実績 3. 堅牢なオブジェクト指向プログラミングサポート 4. 大規模エンタープライズアプリケーションでの実績 73