Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GO言語-Java対応チートシート-用語編-
Search
ymgc
October 02, 2024
Programming
1
28
GO言語-Java対応チートシート-用語編-
ymgc
October 02, 2024
Tweet
Share
More Decks by ymgc
See All by ymgc
Machines of Loving Grace - AIはどのように世界をより良く変えるか -
__ymgc__
1
36
ファシリテーションの技術
__ymgc__
2
28
(論文読み)BigCodeBench: 多様な関数呼び出しと複雑な指示を用いたコード生成のベンチマーキング
__ymgc__
1
28
(論文読み)Very Large-Scale Multi-Agent Simulation in AgentScope
__ymgc__
1
21
7 POWERS
__ymgc__
1
23
自己組織化系のベイズ力学
__ymgc__
1
31
エムラン・メイヤー 『腸と脳』
__ymgc__
1
24
(論文読み)不特定多数の人工知能エージェントによる自由行動の安全化に関する研究
__ymgc__
1
28
群論入門:集合と対称性の数学
__ymgc__
0
24
Other Decks in Programming
See All in Programming
JavaでLチカしたい! / JJUG CCC 2024 Fall LT
nhayato
0
120
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
4
790
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
160
受け取る人から提供する人になるということ
little_rubyist
0
210
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.2k
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
280
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
5
1.5k
CSC509 Lecture 12
javiergs
PRO
0
140
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
180
subpath importsで始めるモック生活
10tera
0
110
CSC509 Lecture 11
javiergs
PRO
0
180
現場で役立つモデリング 超入門
masuda220
PRO
15
3.1k
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Facilitating Awesome Meetings
lara
50
6.1k
Designing for Performance
lara
604
68k
Building Applications with DynamoDB
mza
90
6.1k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
Done Done
chrislema
181
16k
Designing the Hi-DPI Web
ddemaree
280
34k
The Cult of Friendly URLs
andyhume
78
6k
Typedesign – Prime Four
hannesfritz
40
2.4k
Transcript
Go:Java対応チートシート 用語まとめ 1
はじめに このチートシートの目的: 想定読者: 「Goのこの機能はJavaでいうとこれだよね」という対応関係を説明 ▶ Java開発者がGoコードを理解しやすくする ▶ Javaの実務経験があり、Goの現場にアサインされた方 ▶ JavaもGoも扱う現場担当者
▶ 2
1. 基本用語 3
言語構造 用語 Goにおける説明 Javaでいうと package コードをグループ化する単位 パッケージ func 関数を定義する メソッド
struct カスタムデータ型を定義する クラス interface メソッドのセットを定義する インターフェース type 新しい型を定義する クラス, インターフェース 関連リンク: Go言語の基本構文 ▶ 4
並行処理 用語 Goにおける説明 Javaでいうと Goroutine 軽量スレッド Thread channel Goroutine間の通信に使用 BlockingQueue
select 複数のチャネル操作を待機 Java NIO Selector sync.Mutex 相互排他ロック synchronized, Lock sync.WaitGroup 複数のGoroutineの完了を待機 CountDownLatch 関連リンク: Goの並行処理 ▶ 5
エラー処理 用語 Goにおける説明 Javaでいうと error interface エラーを表現するインターフェース Exception panic/recover 例外的な状況の処理
try-catch defer 関数終了時に実行される処理を定義 try-finally 関連リンク: Goのエラー処理 ▶ 6
データ構造 用語 Goにおける説明 Javaでいうと slice 可変長配列 ArrayList map キーと値のペアを格納する HashMap
array 固定長配列 配列 make スライス、マップ、チャネルの作成 new new ポインタを返す new 関連リンク: Goのスライスの使用法 ▶ 7
2. Goの周辺ツール、ミドルウェアなど 8
ビルドとパッケージ管理 用語 Goにおける説明 Javaでいうと Go mod Goの依存関係管理ツール Maven, Gradle Go
build Goプログラムをコンパイルする javac Go run Goプログラムをコンパイルして実行する java Go get 外部パッケージをダウンロードしてインストールする Maven依存関係のダウンロード 関連リンク: Go Modules入門 ▶ 9
テストとプロファイリング 用語 Goにおける説明 Javaでいうと Go test Goの標準テストフレームワーク JUnit testify アサーションライブラリ
JUnit Assertions Go vet Goの標準静的解析ツール SonarQube pprof Goの標準プロファイリングツール JProfiler 関連リンク: Goのテスト入門 ▶ 10
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
3. Go開発者環境 12
開発環境設定 用語 Goにおける説明 Javaでいうと GoPATH Goのワークスペースを指定する環境変数 CLASSPATH GoROOT Goのインストールディレクトリを指定する環境変数 JAVA_HOME
Go env Go環境変数を表示/設定 環境変数の設定 関連リンク: Goのインストールと環境設定 ▶ 13
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
デバッグとトレース 用語 Goにおける説明 Javaでいうと Delve Goのデバッガー JDB, IntelliJ Debugger Go
tool trace Goの実行トレースツール Java Flight Recorder 関連リンク: DelveでのGoのデバッグ ▶ 15
4. GoのUI 16
デスクトップGUI 用語 Goにおける説明 Javaでいうと fyne クロスプラットフォームGUIツールキット JavaFX gio 即時モードGUIフレームワーク Swing
Gotk3 GTK3のGoバインディング SWT 関連リンク: Fyne - クロスプラットフォームGUIフレームワーク ▶ 17
Webベース UI 用語 Goにおける説明 Javaでいうと webview Webベースのデスクトップアプリケーションを作成するためのライブラリ JavaFX WebView electron
GoバックエンドとElectronフロントエンド Java + Electron 18
5. GoのDB関連 19
リレーショナルデータベース 用語 Goにおける説明 Javaでいうと database/sql Goの標準データベースインターフェース JDBC sqlx 拡張されたデータベースライブラリ MyBatis
GoRM GoのORMライブラリ Hibernate pgx PostgreSQL用の高性能ドライバー PostgreSQL JDBC Driver 関連リンク: Goのdatabase/sqlパッケージ使用法 ▶ 20
NoSQL データベース 用語 Goにおける説明 Javaでいうと Go-redis Redisクライアント Jedis mGo MonGoDBドライバー
MonGoDB Java Driver Gocb Couchbaseクライント Couchbase Java SDK 関連リンク: Go-redis - Goの高性能Redisクライアント ▶ 21
6. Goのファイル連携に関する用語 22
基本的なファイル操作 用語 Goにおける説明 Javaでいうと os.Open ファイルを開く FileInputStream os.Create ファイルを作成する FileOutputStream
bufio.NewReader バッファリングされたリーダーを作成 BufferedReader bufio.NewWriter バッファリングされたライターを作成 BufferedWriter 関連リンク: Goのファイル操作入門 ▶ 23
高レベルのファイル操作 用語 Goにおける説明 Javaでいうと ioutil.ReadFile ファイルの内容を全て読み込む Files.readAllBytes() ioutil.WriteFile ファイルに内容を書き込む Files.write()
filepath.Walk ディレクトリを再帰的に走査 Files.walkFileTree() os.MkdirAll ディレクトリを再帰的に作成 Files.createDirectories() 24
ファイルシステム操作 用語 Goにおける説明 Javaでいうと os.Stat ファイル情報を取得 Files.getAttribute() os.Chmod ファイルの権限を変更 Files.setPosixFilePermissions()
os.Rename ファイル名を変更 Files.move() os.Remove ファイルを削除 Files.delete() 関連リンク: Goのos/filepathパッケージ ▶ 25
7. 言語仕様 26
型システム 用語 Goにおける説明 Javaでいうと 静的型付け コンパイル時に型チェックを行う 同様 型推論 var キーワードを使用して型を推論
var キーワード(Java 10以降) インターフェース 暗黙的な実装 明示的な実装(implements キーワード) ジェネリクス Go 1.18以降でサポート 広範にサポート nil ポインタ、インターフェース等のゼロ値 null 関連リンク: Goの型システム ▶ 27
メモリ管理 用語 Goにおける説明 Javaでいうと ガベージコレクション 自動メモリ管理 同様 escape analysis スタック割り当ての最適化
同様(JVMで実行) 値型とポインタ型 明示的に区別 参照型のみ(プリミティブ型を除く) 関連リンク: Goのメモリモデル ▶ 28
並行処理モデル 用語 Goにおける説明 Javaでいうと CSP Goroutineとchannelによる通信順序プロセス Actor model(Akkaなど) スケジューラ Go
runtime によるGoroutineのスケジューリング JVM のスレッドスケジューラ sync.Pool 一時オブジェクトのプール ThreadLocal, オブジェクトプール 関連リンク: Goの並行処理パターン ▶ 29
8. 標準ライブラリ 30
入出力処理 用語 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
文字列処理 用語 Goにおける説明 Javaでいうと strings パッケージ 文字列操作ユーティリティ java.lang.String, StringUtils (Apache
Commons) strconv パッケージ 文字列変換 Integer.parseInt, Double.parseDouble など regexp パッケージ 正規表現 java.util.regex パッケージ 関連リンク: Goのstringsパッケージ ▶ 32
コレクション 用語 Goにおける説明 Javaでいうと slice 動的配列 ArrayList map ハッシュテーブル HashMap
list パッケージ 双方向リスト LinkedList ring パッケージ 循環リスト - (カスタム実装が必要) 33
時間と日付 用語 Goにおける説明 Javaでいうと time パッケージ 時間と期間の操作 java.time パッケージ time.Time
時刻を表す java.time.Instant, LocalDateTime time.Duration 期間を表す java.time.Duration 関連リンク: Goのtimeパッケージ ▶ 34
9. ツールチェーン 35
ビルドツール 用語 Goにおける説明 Javaでいうと Go build ソースコードのコンパイルとリンク javac Go install
バイナリのビルドとインストール Maven install Go generate ソースコード生成 Annotation Processor 関連リンク: Goのコマンドドキュメント ▶ 36
依存関係管理 用語 Goにおける説明 Javaでいうと Go.mod モジュール定義ファイル pom.xml, build.gradle Go get
依存関係のダウンロード Maven/Gradle の依存関係解決 Go mod tidy 依存関係の整理 Maven/Gradle の依存関係解決 関連リンク: Go Modulesのチュートリアル ▶ 37
コード品質 用語 Goにおける説明 Javaでいうと Go fmt コードフォーマッタ Checkstyle Go vet
静的解析ツール SpotBugs, SonarQube Golangci-lint 統合リントツール PMD, Checkstyle, SpotBugs の組み合わせ 関連リンク: Golangci-lintの使い方 ▶ 38
10. デザインパターンと実装技法 39
エラー処理 用語 Goにおける説明 Javaでいうと 複数返り値によるエラー返却 func DoSomething() (Result, error) チェック例外、Optional
errors.Is / errors.As エラーの種類の判定 instanceof による例外の型チェック カスタムエラー struct による独自エラー型の定義 カスタム例外クラス 関連リンク: Goのエラー処理ベストプラクティス ▶ 40
並行処理パターン 用語 Goにおける説明 Javaでいうと fan-out, fan-in Goroutineとchannelを使用 ExecutorService, CompletableFuture worker
pool Goroutineプール ThreadPoolExecutor Context リクエストスコープの値と取り消し ThreadLocal, 取り消し可能なFuture 関連リンク: Goの並行処理パターン ▶ 41
11. パフォーマンスチューニング 42
メモリ最適化 用語 Goにおける説明 Javaでいうと 構造体のフィールド順序 メモリアライメントを考慮 @Contended アノテーション sync.Pool オブジェクトの再利用
オブジェクトプール スライスの事前割り当て make([]T, 0, capacity) ArrayList のキャパシティ指定 関連リンク: Goのメモリ最適化テクニック ▶ 43
並行処理の最適化 用語 Goにおける説明 Javaでいうと GoMAXPROCS 使用するCPU数の制御 Runtime.getRuntime().availableProcessors() Goroutine の適切な利用 軽量なため多用可能
スレッドプールの適切なサイジング チャネルのバッファリング バッファ付きチャネル BlockingQueue のキャパシティ指定 関連リンク: Goの並行処理のパフォーマンスチューニング ▶ 44
プロファイリングとベンチマーク 用語 Goにおける説明 Javaでいうと Go test -bench ベンチマークテスト JMH (Java
Microbenchmark Harness) pprof CPUとメモリのプロファイリング Java Flight Recorder, VisualVM trace 実行トレース Java Flight Recorder 関連リンク: Goのプロファイリングとトレーシング ▶ 45
12. セキュリティ 46
暗号化 用語 Goにおける説明 Javaでいうと crypto パッケージ 暗号化アルゴリズムの実装 java.security, javax.crypto パッケージ
crypto/tls TLS接続の実装 javax.net.ssl パッケージ crypto/rand 暗号学的に安全な乱数生成 java.security.SecureRandom 関連リンク: Goの暗号化パッケージ ▶ 47
認証・認可 用語 Goにおける説明 Javaでいうと JWT-Go JSONウェブトークンの実装 JJWT (Java JWT) oauth2
パッケージ OAuth 2.0クライアントの実装 Spring Security OAuth bcrypt パスワードハッシュ化 Spring Security の BCryptPasswordEncoder 関連リンク: JWT-Goライブラリ ▶ 48
13. ネットワーキング 49
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
ソケットプログラミング 用語 Goにおける説明 Javaでいうと net.Dial ネットワーク接続の確立 Socket net.Listen ネットワークリスナーの作成 ServerSocket
net.Conn インターフェース ネットワーク接続の抽象化 Socket 関連リンク: Goのnetパッケージ ▶ 51
14. システム連携 52
データシリアライゼーション 用語 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
メッセージングシステム 用語 Goにおける説明 Javaでいうと Go-redis Redisクライアント Jedis, Lettuce sarama Apache
Kafkaクライアント Apache Kafka Clients amqp RabbitMQクライアント Spring AMQP 関連リンク: Go-redisライブラリ ▶ 54
15. テスト 55
ユニットテスト 用語 Goにおける説明 Javaでいうと testing パッケージ 標準テストフレームワーク JUnit testify アサーションライブラリ
AssertJ Go-cmp 深い比較 EqualsBuilder (Apache Commons) 関連リンク: Goのtestingパッケージ ▶ 56
モック 用語 Goにおける説明 Javaでいうと Gomock モックオブジェクト生成 Mockito httptest パッケージ HTTPテスト用ユーティリティ
MockMvc (Spring Test) 関連リンク: Gomockライブラリ ▶ 57
ベンチマークとプロファイリング 用語 Goにおける説明 Javaでいうと testing.B ベンチマークテスト JMH (Java Microbenchmark Harness)
pprof プロファイリングツール Java Flight Recorder, YourKit 関連リンク: Goのベンチマークテスト ▶ 58
16. クラウドネイティブ開発 59
コンテナ化 用語 Goにおける説明 Javaでいうと 軽量バイナリ シングルバイナリでデプロイ可能 Fat JAR, Spring Boot
Executable JAR scratch イメージ 最小限のDockerイメージ JRE-alpine イメージ 関連リンク: GoアプリケーションのDockerfile最適化 ▶ 60
マイクロサービス 用語 Goにおける説明 Javaでいうと Go-micro マイクロサービスフレームワーク Spring Boot, Micronaut Go-kit
マイクロサービスツールキット Spring Cloud consul-api サービスディスカバリ (Consul) Spring Cloud Consul 関連リンク: Go-microフレームワーク ▶ 61
クラウドサービス連携 用語 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
17. エコシステムと実行環境 63
パッケージマネージャ 用語 Goにおける説明 Javaでいうと Go get 依存関係のダウンロードとインストール Maven, Gradle Go
mod モジュール管理システム Maven, Gradle dep (非推奨) 以前の依存関係管理ツール Apache Ivy 関連リンク: Go Modulesの使い方 ▶ 64
コミュニティとリソース 用語 Goにおける説明 Javaでいうと Go Playground オンラインコード実行環境 JDoodle Awesome Go
Goリソースのキュレーションリスト Awesome Java Go Forum 公式ディスカッションフォーラム Stack Overflow, Reddit r/java 関連リンク: Go Playground ▶ 65
人気のあるフレームワークとライブラリ 用語 Goにおける説明 Javaでいうと gin Webフレームワーク Spring Boot Gorm ORM
Hibernate cobra CLIアプリケーションフレームワーク picocli viper 設定管理 Spring Boot Externalized Configuration 関連リンク: Gin Web Framework ▶ 66
18. 言語の設計方針 67
設計原則 観点 Go Java 設計思想 シンプルさと実用性重視 汎用性と堅牢性重視 コード スタイル 強制的なフォーマット(Go
fmt) コーディング規約はあるが強制ではない エラー処理 明示的なエラー返却 例外機構 並行処理モデル CSP(Communicating Sequential Processes) 共有メモリとロック 型システム 構造的型付け 名前的型付け メモリ管理 ガベージコレクション(シンプルで予測可能) ガベージコレクション(複雑で高度) 関連リンク: Goの設計哲学 ▶ 68
型システムと総称型 機能 Go Java 総称型 1.18以降でサポート(シンプルな実装) 完全サポート(複雑な実装) 型推論 広範囲(var キーワード、:=
演算子) 限定的(var キーワード、ラムダ式) null安全性 ポインタ型のみnilable Optional型の使用推奨 共変性・反変性 未サポート ワイルドカード(? extends, ? super)でサポート 関連リンク: Goのジェネリクス入門 ▶ 69
並行処理と並列処理 機能 Go Java 基本単位 Goroutine(軽量) Thread(比較的重い) 通信手段 channel 共有メモリ、java.util.concurrent
同期プリミティブ sync パッケージ synchronized、java.util.concurrent 並列処理 GoMAXPROCS ForkJoinPool、ParallelStream 関連リンク: Goの並行処理モデル ▶ 70
メモリ管理とパフォーマンス 機能 Go Java メモリモデル 値型とポインタ型 すべてがオブジェクト(プリミティブ型を除く) GCアルゴリズム 並行トライカラーマーク&スイープ 複数のアルゴリズム(G1GC、ZGC等)
メモリ割り当て スタックとヒープ(エスケープ解析) 主にヒープ(JITによる最適化) パフォーマンスチューニング GoGC、GC Trace JVM引数、GCログ解析 関連リンク: Goのメモリモデル ▶ 71
まとめ 72
Goの特徴 Javaの特徴 1. シンプルで読みやすい構文 2. 高速なコンパイルと実行 3. 組み込みの並行処理サポート 4. 強力な標準ライブラリ
1. プラットフォーム非依存性(Write Once, Run Anywhere) 2. 豊富なエコシステムと長年の実績 3. 堅牢なオブジェクト指向プログラミングサポート 4. 大規模エンタープライズアプリケーションでの実績 73
まとめ 両言語の違いを理解し、それぞれの強みを活かすことが重要 ▶ Goは並行処理やマイクロサービス、クラウドネイティブアプリケーションの開発で強み ▶ Javaは大規模で複雑なエンタープライズアプリケーションや長期的なメンテナンスが必要なシステムで優れている ▶ 関連リンク: ▶ Go言語公式ドキュメント
- Java言語公式ドキュメント - 74