Golang がフォトウォールを実装
モバイル インターネットの普及に伴い、写真に対する人々の需要が高まっています。イベントでも旅行でもパーティーでも写真撮影は欠かせません。これらの写真をどのように展示するかも悩みの種となっている。フォトウォール機能を実装するアプリができましたので、今回はgolang言語を使ってフォトウォールを実装する手順を紹介します。
1. Golang 言語の特徴
golang は、Google によって開発されたオープンソース言語です。主な機能は次のとおりです:
- 効率: Golang のコンパイル速度は非常に速く、C や Java と比較して大きな利点があります。
- メモリ管理: Golang のメモリ管理はコンパイラによって自動的に完了するため、プログラマが手動でメモリを管理する必要はありません。
- 同時プログラミング: golang は同時プログラミングの強力なサポートを提供し、マルチコア CPU または複数のサーバーの場合にアプリケーションのパフォーマンスを向上させることができます。
- シンプルさ: golang 言語の構文は簡潔で理解しやすいため、プログラマーはより早く作業を開始できます。
2. デザインのアイデア
フォト ウォール機能を実装するときは、次の点を考慮する必要があります:
- 写真のアップロード: ユーザーは次のことを行う必要があります。自分の写真をアップロードするときは、簡単に分類して表示できるように写真にタグを付けることもできる必要があります。
- 写真の表示: アップロードされた写真はタグに従って分類して表示され、ユーザーはタグを選択して表示できます。
- データベース ストレージ: フォト ウォールにはユーザーがアップロードした写真データを保存する必要があり、データ ストレージにはデータベースを使用する必要があります。
3. 技術的な実装
- 環境セットアップ
始める前に、まず環境を準備する必要があります。 golang の公式 Web サイトから golang インストール パッケージをダウンロードできます。インストールが完了したら、ターミナルに次のコードを入力して、インストールが成功したかどうかを確認します:
$ go version
- Database Design
ユーザーがアップロードした写真を保存するデータベースを設計する必要があるため、次のフィールドを含むテーブルを設計する必要があります:
- #id (写真 ID、主キー) name (写真の名前)
- path (写真のパス、サーバー上の写真の保存パス) tag (タグ)
- 写真のアップロード
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>照片上传</title> </head> <body> <input type="file" id="file"> <input type="text" id="tag"> <button onclick="upload()">上传</button> </body> <script> function upload() { var file = document.getElementById("file").files[0]; var tag = document.getElementById("tag").value; var formData = new FormData(); formData.append("file", file); formData.append("tag", tag); var xhr = new XMLHttpRequest(); xhr.open("POST", "/upload", true); xhr.onload = function () { if (xhr.readyState == 4 && xhr.status == 200) { alert("上传成功"); } else { alert("上传失败"); } } xhr.send(formData); } </script> </html>
func upload(w http.ResponseWriter, r *http.Request) { file, handler, err := r.FormFile("file") if err != nil { fmt.Println(err) return } defer file.Close() tag := r.FormValue("tag") fileName := handler.Filename f, err := os.OpenFile("./upload/"+fileName, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Println(err) return } defer f.Close() io.Copy(f, file) insertData(fileName, "./upload/"+fileName, tag) w.Write([]byte("上传成功")) }
- 写真の表示
func getPhotos(w http.ResponseWriter, r *http.Request) { tag := r.FormValue("tag") var photos []Photo if tag == "" { db.Find(&photos) } else { db.Where("tag=?", tag).Find(&photos) } result := make([]string, len(photos)) for i, photo := range photos { result[i] = photo.Path } jsonBytes, err := json.Marshal(result) if err != nil { fmt.Println(err) return } w.Write(jsonBytes) }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>照片墙</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js"></script> <style> .photo { width: 200px; margin: 10px; } </style> </head> <body> <input type="text" id="tag"> <button onclick="getPhotos()">搜索</button> <div id="container"> <div class="grid-sizer"></div> </div> </body> <script> function getPhotos() { var tag = document.getElementById("tag").value; $.ajax({ url: "/getPhotos", type: "GET", data: {"tag": tag}, success: function (data) { var html = ""; for (var i = 0; i < data.length; i++) { html += '<div class="photo"><img src="' + data[i] + '"></div>'; } $("#container").html(html); var $container = $('#container'); $container.imagesLoaded(function () { $container.masonry({ itemSelector: ".photo", columnWidth: ".grid-sizer", gutter: 10 }); }); } }); } </script> </html>
以上がGolang がフォトウォールを実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、Goのパッケージインポートメカニズム:名前付きインポート(例:インポート "fmt&quot;)および空白のインポート(例:_&quot; fmt&quot;)について説明しています。 名前付きインポートはパッケージのコンテンツにアクセス可能になり、空白のインポートはtのみを実行します

この記事では、Webアプリケーションでのページ間データ転送のためのBeegoのnewflash()関数について説明します。 newflash()を使用して、コントローラー間で一時的なメッセージ(成功、エラー、警告)を表示し、セッションメカニズムを活用することに焦点を当てています。 リミア

この記事では、MySQLクエリの結果をGO structスライスに効率的に変換することを詳しく説明しています。 データベース/SQLのスキャン方法を使用して、手動で解析することを避けて強調しています。 DBタグとロブを使用した構造フィールドマッピングのベストプラクティス

この記事では、ユニットテストのためにGOのモックとスタブを作成することを示しています。 インターフェイスの使用を強調し、模擬実装の例を提供し、模擬フォーカスを維持し、アサーションライブラリを使用するなどのベストプラクティスについて説明します。 articl

この記事では、GENICSのGOのカスタムタイプの制約について説明します。 インターフェイスがジェネリック関数の最小タイプ要件をどのように定義するかを詳しく説明し、タイプの安全性とコードの再利用性を改善します。 この記事では、制限とベストプラクティスについても説明しています

この記事では、goで効率的なファイルの書き込みを詳しく説明し、os.writefile(小さなファイルに適している)とos.openfileおよびbuffered write(大規模ファイルに最適)と比較します。 延期エラー処理、Deferを使用し、特定のエラーをチェックすることを強調します。

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

この記事では、トレースツールを使用してGOアプリケーションの実行フローを分析します。 手動および自動計装技術について説明し、Jaeger、Zipkin、Opentelemetryなどのツールを比較し、効果的なデータの視覚化を強調しています
