【Go】go修行19日目HMAC

パッケージ メイン
インポート (
"crypto / hmac"
"crypto / sha256"
"encoding / hex"
"fmt"
)
//サーバーサイドで正しいクライアントのものかを判別
var DB = map [ string ] string {
"User1Key" : "User1Secret" 、
"User2Key" : "User2Secret" 、
}
func Server (apiKey 、 sign string 、 data [] byte ) {
apiSecret := DB [ apiKey ]
// sha256の同じアルゴリズムを使う
h := hmac 。新規(sha256 。新規、 [] バイト(apiSecret ))
h 。書き込み(データ)
expectedHMAC := hex 。EncodeToString (H 。和(ゼロ))
//同じアルゴリズムでエンコードしたhmacが一致するかを確認
fmt 。Println (sign == expectedHMAC )
}
func main () {
const apiKey = "User1Key"
const apiSecret = "User1Secret"
data := [] byte ("data" )
h := hmac 。新規(sha256 。新規、 [] バイト(apiSecret ))
h 。書き込み(データ)
記号 := 16進数。EncodeToString (H 。和(ゼロ))
//ハッシュ値
fmt 。Println (記号)
//
サーバーに投げるServer (apiKey 、 sign 、 data )
}
出力
076b55e7f7e12624b4569f162302f1e36c11fb3a9134889267748de14a84b996
本当
golang.org/x/sync/semaphoreを取得します
パッケージ メイン
インポート (
"context"
"fmt"
"time"
"golang.org/x/sync/semaphore"
)
//並行実行できるプロセス数を制限
var s * セマフォ。加重 = セマフォ。NewWeighted (1 )
FUNCの longProcess (CTX コンテキスト。コンテキスト){
//処理が並行している場合ロックをかけることができる
isAcquire := S 。次の場合は、TryAcquire (1 )を実行し
て ください。isAcquire {
fmt 。Println ("ロックを取得できませんでした" )
return
}
延期 秒。リリース(1 )
fmt 。Println ("Wait ..." )
時間。スリープ(1 * 時間。秒)
fmt 。Println ("完了" )
}
func main () {
ctx := context 。TODO ()
go longProcess (ctx )
go longProcess (ctx )
go longProcess (ctx )
時間。スリープ(5 * 時間。秒)
}
ロックを取得できませんでした
ロックを取得できませんでした
待つ...
できた
パッケージ メイン
インポート (
"fmt"
"github.com/go-ini/ini"
)
タイプ ConfigList struct {
Port int
DbName string
SQLDriver string
}
var Config ConfigList
// main
関数 が呼ばれる前に設定を呼び込むfunc init (){
cfg 、 _ := ini 。Load ("config.ini" )
Config = ConfigList {
Port : cfg 。セクション("web" )。キー("ポート" )。MustInt ()、
DbName : cfg 。セクション("db" )。キー("名前" )。MustString ("example.sql")、
SQLDriver : cfg 。セクション("db" )。キー(「ドライバー」)。文字列()、
}
}
func main (){
fmt 。Printf ("%T%v \ n " 、 構成。ポート、 構成。ポート)
fmt 。printf ("%のTの体積%\ n " 、 構成。DBNAME 、 コンフィグ。DBNAME )
FMT 。printf ("%のTの体積%\ n " 、 構成。SQLDriver 、 コンフィグ。SQLDriver )
}
[ウェブ]
ポート = 8080
[db]
名前 = stockdata.sql
ドライバー = sqlite3
出力
int 8080
文字列stockdata.sql
文字列sqlite3
https://www.udemy.com/course/go-fintech/learn/lecture/12088980