株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

HAMC

パッケージ メイン

インポート 
    "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
本当

セマフォ

  • goroutineが走る数を限定することができる
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  *  時間
}
ロックを取得できませんでした
ロックを取得できませんでした
待つ...
できた

ini

  • configファイルを必須
  • サーバーの設定値など
パッケージ メイン

インポート 
    "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 

}
config.ini
[ウェブ] 
ポート =  8080

[db] 
名前 =  stockdata.sql 
ドライバー =  sqlite3

出力

int 8080
文字列stockdata.sql
文字列sqlite3

教材

https://www.udemy.com/course/go-fintech/learn/lecture/12088980

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)