ホームページ > バックエンド開発 > PHPチュートリアル > PHPからGOにジャンプする:冒とく、勇敢な、または常識?

PHPからGOにジャンプする:冒とく、勇敢な、または常識?

Joseph Gordon-Levitt
リリース: 2025-02-10 11:51:24
オリジナル
266 人が閲覧しました

Jumping from PHP to Go: Blasphemy, Bravado or Common Sense?

コアポイント

  • PHPからのBoxzillaアプリケーションの基礎となるLaravelアプリケーションは、最初は潜在的なビジネスリスクを抱えているにもかかわらず、より効率的なパフォーマンス、展開、より高いテストカバレッジを備えています。
  • GOは、PHPよりも優れた標準ライブラリを備えたコンパイルされた言語であり、外部依存関係が考慮されていても、コードの行が少ないより速く、より少ないアプリケーションを生成できます。 PHPからGOへの変換は、新しい構文と機能に適応する必要がありますが、最終結果は価値があると考えられています。
  • PHPのより大きなコミュニティと豊富なリソースにもかかわらず、GOの人気、シンプルさ、優れたパフォーマンス機能の高まりにより、開発者がコンバージョンを検討することが強力な競争相手になります。著者は、将来、多数の開発者がPHP、Python、JavaScriptなどの動的にタイプされた言語から移行して行くと予測しています。

PHPからGoへの移行に関するこの記事は、もともと他の場所で公開され、著者の許可を得てここで再現されました。


Jumping from PHP to Go: Blasphemy, Bravado or Common Sense?

今年の初めに、私は間違いなく悪いビジネス上の決定を下しました。

しかし、私はそれを後悔していません。

Jumping from PHP to Go: Blasphemy, Bravado or Common Sense?

わずか数週間後、GOアプリを展開しました。数ヶ月で最も幸せな時間でしたが、私は多くのことを学び、古いアプリケーションよりも大幅に改善されました。

アプリケーションは、ユーザーがログインして製品をダウンロードしたり、請求書を表示したり、支払い方法を更新したりできるかなりシンプルなデータベース駆動型APIおよびアカウントエリアです。

StripeとBraintreeは、サブスクリプションの支払いを受け入れるために使用されます。請求書はMoneyBirdを使用して処理され、一部のトランザクションメールはMailGunを使用して送信されます。

Laravelは十分に走っていますが、私は常にいくつかのことが複雑すぎると感じています。そして、数か月ごとにリリースされている新しい「メイン」バージョンで何が起こっているのでしょうか?新しいバージョンに大幅な改善が含まれている場合は幸せですが、私の意見では、多くの場合、名前とディレクトリ構造にいくつかの小さな変更を加えます。

なぜGOを選ぶのですか?

昨年、私はいくつかのサービスを移動するように移動したので、私は言語に完全に新しいものではありませんでした。 WordPressベースの製品を販売している開発者として、私の仕事の一部は、エンドユーザーに焦点を当てた古いテクノロジースタックに対処することです。

私が自営業者でなければ、この「セクシーな」テクノロジーの欠如を補うために新しい仕事を申請します。私自身の上司として、より多くの直接的な利益を追求するだけでなく、私の毎日の仕事を楽しくすることは私の責任です。収入が許可されている(そしてそうする)場合、なぜ楽しんでみませんか?

Goコードを書くことは、驚くべきツールを備えた快適なものであり、迅速な開発だけでなく、最終結果は通常非常に高速です。 GOプロジェクトの目的を読んで、この言語に恋をしました。

今後数年間で、PHP、Python、JavaScriptなどの動的にタイプされた言語から移動するのはかなりの数の人々が行くと思います。

コードライブラリの移行

Golangへのコードの移行には、主にデータベースインタラクションを正しく行い、BladeテンプレートをGOで使用できるものに移植することが含まれます。

ormは常に私の邪魔をするので、シミュレート可能なデータアクセスレイヤーと通常のSQLクエリを選択しました。 Meddlerは、クエリの結果を構造にスキャンするいくつかのボイラープレートコードを削除するために使用されます。

レイヤードテンプレートと部分的なテンプレートをサポートするために、Goの標準HTML/テンプレートパッケージの周りの小さなラッパーであるオープンソースGreenerです。これにより、同じ階層と部分テンプレートを使用できるため、Bladeテンプレートファイルを比較的簡単に移動することができます。

Stripeとの統合については、公式のStripe-goパッケージがあります。 Braintreeの場合、しばらく見落とされてきたが、最近新しい注目を集めている非公式のBraintree-Goパッケージがあります。 MoneyBirdで請求書を管理するためのGoパッケージはないので、私はMoneyBird-go-Goを組み立ててオープンしました。

リンゴとオレンジを比較

Goはコンパイルされた言語であり、その標準ライブラリはPHPよりもはるかに優れているため、私がやろうとしている2つの言語を比較することは公平ではありません。とはいえ、いくつかの数字を共有するのは楽しいと思います。

パフォーマンス

WRKは、両方のアプリケーションでいくつかの簡単なHTTPベンチマークを実行するために使用され、ログインページのHTMLを返します。

sconrency番号 平均遅延 リクエスト/second 転送/second

laravel 13.87ms261.48 1.27mb laravel100108.86ms917.276.04MB 1 325.72μs7365.4834.27mb 11.63ms 19967.31 92.91MB go 200 37.68ms 22653.22 105.41MB

残念ながら、「ユーザー」の数を100以上に増やすと、Laravelアプリケーション(またはPHP-FPMソケット)がクラッシュし続けます。

NetDataは、サーバーがそのような負荷に耐える方法を確認するために、次のチャートを提供します。

言語に行くと、同時接続の数は100 laravel、同時接続の数は100 アプリケーションが実行されるのと同じマシンからベンチマークを実行するため、これは両方のチャートに深刻な影響を与えることに注意してください。

コードの行の数Jumping from PHP to Go: Blasphemy, Bravado or Common Sense?

すべてのベンダー依存関係を含む、両方のアプリケーションのコードの行の数を比較しましょう。

Laravelバージョンには、156,000行以上のコードが含まれています。これには、Laravelがテストなどを実行するために必要な開発依存関係は含まれません。

一方、Golangバージョンには33,000行のコードが含まれています。これは、同じ関数コードの5分の1です。
<code>find . -name '*.php' | xargs wc -l
156289 total
</code>
ログイン後にコピー

Laravelアプリケーションの外部依存関係を除外して、実際に書いたコードの行の数を知るようにしましょう。

<code>find . -name '*.go' | xargs wc -l
33624 total
</code>
ログイン後にコピー
ゴーランの場合。

コードの管理行列の数のみを表示する場合、結果はよりバランスが取れます。それでも、それは同じ機能を備えたアプリケーションであり、コードの量が半分です。

<code>find . -name '*.php' -not -path "./vendor/*" | xargs wc -l
13921 total
</code>
ログイン後にコピー
テストカバレッジ

Golangでは、テストは一流の市民であり、テストファイルは実際のソースファイルの横にあります。

<code>find . -name '*.go' -not -path "./vendor/*" | xargs wc -l
6750 total
</code>
ログイン後にコピー

これにより、アプリケーションテスト駆動型開発が非常に便利になります。

Laravelアプリケーションでは、主に統合テストを実施して、リクエストハンドラーが正しい応答を返すかどうかを確認します。全体的なテストカバレッジは非常に低いです。これは、主に緊密なカップリングのためであり、これが主に私自身の欠点です。同じアプリを2回目に書くことはここで役立ちます。

tldr

<code>license.go
license_test.go
subscription.go
subscription_test.go</code>
ログイン後にコピー
私はあなたが決してすべきではないことをしました:私はそのように感じたので、私は別の言語でアプリを書き直しました。その結果、より小さく、より速いアプリととても楽しいものになります。

PHPからGO

への移行に関するよくある質問

PHPとGOの主な違いは何ですか?

PHPとGOはどちらも強力なプログラミング言語ですが、いくつかの重要な違いがあります。 PHPは主にWeb開発に使用されるスクリプト言語であり、Goは効率とシンプルさを改善するために設計された静的に型付けられたコンパイルされた言語です。 GOは、スピードとメモリの使用量で優れたパフォーマンスを提供し、そのシンプルさと強いタイプされた性質のために維持しやすくなります。ただし、PHPにはコミュニティが大きく、より利用可能なリソースがあり、学習と使用が容易になります。

なぜPHPから行くために移行することを検討する必要があるのですか?

PHPからGOに移行することを検討する理由はいくつかあります。 GOは優れたパフォーマンスを提供します。これは、高速と効率を必要とするアプリケーションにとって重要です。また、よりシンプルで直接的であり、コードを維持しやすくすることができます。さらに、GOは同時プログラミングを強くサポートしています。これは、一部のタイプのアプリケーションにとって大きな利点になる可能性があります。

PHPから移動するのはどれくらい難しいですか?

PHPから移行することの難しさは、プログラミングの概念に精通していることと、新しい言語を学ぶ意欲によって異なります。 Goのデザインはシンプルで理解しやすいですが、適応するのに時間がかかるユニークな機能がいくつかあります。ただし、ある程度の努力と実践により、ほとんどの開発者は変換を完了できるはずです。

私が行くことを学ぶのに役立つリソースは何ですか?

あなたが行くことを学ぶのに役立つ多くのリソースがあります。公式GO Webサイトには包括的なチュートリアルとドキュメントが提供されており、利用可能なオンラインコースとチュートリアルがたくさんあります。さらに、GOコミュニティは積極的で協力的であり、質問をして助けを得ることができる多くのフォーラムやディスカッショングループがあります。

PHPで行うようにWeb開発に行くことはできますか?

はい、Web開発にはGoを使用できます。 GOには、Webアプリケーションを簡単に構築できるようにするネット/HTTPパッケージが組み込まれており、GOに利用できるWebフレームワークがいくつかあります。ただし、GOは共通言語であることを忘れないでください。そのため、PHPなどのWeb開発には特別に使用されていません。

PHPと比較して、Go Goはどのように並行性を処理しますか?

Goは、PHPよりも主な利点の1つである同時プログラミングを強くサポートしています。 GoのGoroutineとチャンネルにより、同時コードの書き込みが簡単になり、言語の設計により、このコードの効率とセキュリティが保証されます。対照的に、PHPには組み込みの並行性サポートはありませんが、他のツールやライブラリを使用して実装できます。

PHPとGOのパフォーマンスの違いは何ですか?

GOは通常、PHPよりも優れたパフォーマンスを提供します。これはコンパイルされた言語です。つまり、マシンのハードウェアで直接実行されるため、実行時間が短縮されます。 GOには、より効率的なメモリ管理システムもあり、メモリの使用量を削減できます。ただし、小規模で単純なアプリケーションでは、パフォーマンスの違いは明らかではない場合があることを忘れないでください。

大規模で複雑なプロジェクトに適していますか?

はい、大規模で複雑なプロジェクトに適しています。そのシンプルさと強力なタイプされた機能により、大きなコードベースを維持しやすくなり、パフォーマンス機能により、高負荷アプリケーションに適しています。さらに、同時プログラミングに対するGOのサポートは、高レベルの並列性を必要とするプロジェクトにとって大きな利点になる可能性があります。

GoのコミュニティとエコシステムはPHPとどのように比較されますか?

PHPには、より大きなコミュニティとより利用可能なリソースがあり、学習と使用を容易にします。ただし、GOコミュニティは急速に成長しており、すでに多くのライブラリとツールが利用可能です。さらに、GOのシンプルさとパフォーマンスの特性により、多くのハイテク企業の間で人気があり、成長する生態系にも貢献しています。

PHPから移動する際にどのような課題が発生する可能性がありますか?

新しい構文やプログラミングパラダイムの学習、ゴロウチンやチャネルなどのGOのユニークな機能に適応し、ニーズに合った適切なライブラリとツールを見つけるなど、PHPからGOに移行する際には、いくつかの課題があるかもしれません。しかし、これらの課題は、ある程度の努力と適切なリソースで克服することができます。

以上がPHPからGOにジャンプする:冒とく、勇敢な、または常識?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート