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

<スポンサーリンク>

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

*

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