go get github.com/gin-gonic/gin
Gin は、高速かつ軽量なWebアプリケーションフレームワークであり、Go 言語での Web 開発をシンプルにするための多くの機能を提供します。ルーティング、ミドルウェア、JSON レスポンスの生成などの機能を簡単に実装できるため、効率的で堅牢な Web アプリケーションを作成するのに役立ちます。
の例では、単純なAPIエンドポイントを作成し、リクエストを受けた際に "Hello, World!" というメッセージを返すものです。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// GETリクエストを処理するハンドラ
r.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, World!",
})
})
r.Run(":8080")
}
上記の例では、r.GET("/hello", ...) で /hello というパスに対するGETリクエストを処理するハンドラを登録しています。ハンドラ関数は無名関数(クロージャ)として定義されており、c *gin.Context という引数を受け取ります。このコンテキストオブジェクトを使用して、リクエストに対するレスポンスを作成します。
ハンドラ関数内では、c.JSON(200, gin.H{...}) でJSONレスポンスを生成しています。ここでは、ステータスコード200として "Hello, World!" というメッセージを含むJSONオブジェクトを返しています。
最後に、r.Run(":8080") でWebサーバーを起動し、ポート8080でリクエストを待ち受けます。実行すると、http://localhost:8080/hello にGETリクエストを送ると "Hello, World!" というレスポンスが返されるでしょう。
go get github.com/go-sql-driver/mysql
go-sql-driver/mysql パッケージは、Go 言語の標準的な database/sql パッケージと組み合わせて使用され、MySQL データベースへの接続やクエリの実行などの操作を行うための機能を提供します。
go get github.com/joho/godotenv
このライブラリは、.env ファイルから環境変数を読み込むための機能を提供します。
.env ファイルは、アプリケーションの設定情報や認証情報などの環境変数を格納するためのテキストファイルです。このファイルには、キーと値のペアが含まれ、アプリケーションが実行される際にこれらの値を読み込んで利用することができます。
godotenv ライブラリを使用すると、.env ファイルを簡単に読み込むことができます。具体的には、godotenv.Load() 関数を使用して、.env ファイルを読み込みます。読み込んだ環境変数は、os.Getenv() 関数を使用してアクセスすることができます。
以下は、簡単な例です。
package main
import (
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
dbUser := os.Getenv("DB_USER")
dbPassword := os.Getenv("DB_PASSWORD")
// 読み込んだ環境変数を使用して何かを行う
// ...
}
上記の例では、.env ファイルから DB_USER と DB_PASSWORD の値を読み込み、それらの環境変数を使用して何かを行うことが想定されています。
go get github.com/joho/godotenv コマンドは、Go モジュールを使用して godotenv ライブラリをダウンロードおよびインストールするために使用されます。このコマンドは、Go プロジェクトのコード内で godotenv ライブラリを利用する前に実行する必要があります。
go get golang.org/x/crypto/bcrypt
bcrypt パッケージは、セキュアなハッシュ関数である bcrypt アルゴリズムを提供します。このアルゴリズムは、パスワードのハッシュ化を行う際にソルトを使用してハッシュを生成し、高いセキュリティを確保します。また、暗号強度を調整するためのパラメーターも提供されており、パスワードのハッシュ化において推奨される手法です。
package crypto
import (
"golang.org/x/crypto/bcrypt"
)
// PasswordEncrypt パスワードをhash化
func PasswordEncrypt(password string) (string, error) {
hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
return string(hash), err
}
// CompareHashAndPassword hashと非hashパスワード比較
func CompareHashAndPassword(hash, password string) error {
return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
}
go get github.com/jinzhu/gorm
Go 言語で使用される人気のある ORM (Object-Relational Mapping) ライブラリ。
gorm ライブラリは、Go 言語でデータベース操作を行うための強力なツールセットを提供します。データベースのテーブルと Go の構造体をマッピングし、簡潔なコードでデータの作成、読み取り、更新、削除などの操作を実行することができます。また、クエリビルダやプリロード、トランザクションのサポートなど、さまざまな機能も提供されています。
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
type User struct {
ID uint `gorm:"primary_key"`
Name string
Age int
}
func main() {
db, err := gorm.Open("mysql", "user:password@tcp(localhost:3306)/database?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
// マイグレーション
db.AutoMigrate(&User{})
// レコードの作成
user := User{Name: "Alice", Age: 25}
db.Create(&user)
// レコードの読み取り
var result User
db.First(&result, user.ID)
fmt.Println(result)
// レコードの更新
db.Model(&result).Update("Age", 30)
// レコードの削除
db.Delete(&result)
}
上記の例では、gorm.Open("mysql", ...)`` を使用して MySQL データベースに接続し、db.AutoMigrate(&User{}) でテーブルのマイグレーション(作成)を行っています。その後、db.Create(&user) でレコードを作成し、db.First(&result, user.ID) でレコードを読み取ります。さらに、db.Model(&result).Update("Age", 30) でレコードを更新し、db.Delete(&result)` でレコードを削除しています。