ブログ内検索

micro:bitページ
とにかく速いブログサイトを目指す

カテゴリー : Go言語/page-1

SOY CMSマニュアルページ作成中

SOY CMSの開発秘話を投稿しました。→SOY CMSの開発秘話
 

Go言語で関数型の値を扱う

/** Geminiが自動生成した概要 **/
Go言語では関数を値として扱える。 `greet`関数を`f`変数に代入し、`f()`で実行できる。 `dofunc(f func())` は関数型引数を受け取り、その関数を実行する関数である。 `main`関数で`greet`を`f`に代入し、`dofunc(f)`を呼び出すと、`dofunc`内で`f()`が実行され、`greet`関数の処理("hello"の表示)が行われる。 これは関数を第一級オブジェクトとして扱う例である。

 

Go言語で内部コマンドを作成する③

/** Geminiが自動生成した概要 **/
Go言語でコマンドライン引数を扱うflagパッケージの使い方を説明しています。`flag.Int`と`flag.String`でそれぞれ整数型と文字列型のオプションを定義し、デフォルト値と説明文を設定します。`flag.Parse()`でコマンドライン引数を解析し、定義したオプションに値をセットします。実行例として、`main.exe`をビルドし、オプションなしで実行するとデフォルト値の1111と"default"が出力されます。`--help`オプションでヘルプメッセージが表示されます。`-i 5 -s "おはよう"`のようにオプションを指定して実行すると、指定した値が出力されます。つまり、コマンドライン引数からプログラムに値を渡す方法を解説しています。

 

Go言語で内部コマンドを作成する②

/** Geminiが自動生成した概要 **/
Go言語のos.Argsはコマンドライン引数を扱う。`os.Args`はスライスで、最初の要素`os.Args[0]`は実行ファイルのパス。`./main.exe test`と実行すると、`os.Args[1]`は"test"となる。同様に`./main.exe test 5`と実行すれば、`os.Args[1]`は"test"、`os.Args[2]`は"5"となる。つまり、`os.Args`を用いることで、コマンドライン引数にアクセスし、プログラムの動作を制御できる。

 

Go言語で内部コマンドを作成する①

/** Geminiが自動生成した概要 **/
Go言語でコマンドを作成する方法を解説。 `~/workspace/go/cmd`ディレクトリに`main.go`を作成し、`fmt.Println("usako")`を出力するコードを記述。MINGW64を用いて`go build main.go`でコンパイルし、`./main.exe`で実行すると、コマンドラインに"usako"と表示される。 `go build`コマンドはGoのソースコードをコンパイルして実行ファイルを作成する。Windowsでは実行ファイルに`.exe`拡張子が付く。

 

Go言語で一方向ハッシュ関数

/** Geminiが自動生成した概要 **/
Go言語で自作ハッシュ関数を作成し、"ryoko"を暗号化する例が示されています。`CreatHash`関数では、入力文字列をバイト配列に変換後、`sha256.Sum256`でSHA256ハッシュ値を計算し、`hex.EncodeToString`で16進数文字列に変換して返します。 `ryoko`のバイト表現`[114 121 111 107 111]`は、SHA256ハッシュ化され、最終的に`db08d212da1b3ec6c2e3c12d1864626c8d125084c4b05767f00627eebb70bede`というハッシュ値が生成されます。

 

Go言語でファイルの読み込み

/** Geminiが自動生成した概要 **/
Go言語で`template/header.txt`ファイルを読み込む方法を説明しています。`os.Open`関数でファイルを開き、エラー処理も実装しています。`defer file.Close()`で確実にファイルを閉じます。`ioutil.ReadAll`関数でファイルの内容をバイトスライス`content`に読み込み、`string(content)`で文字列`html`に変換します。最後に`fmt.Println(html)`でファイルの内容を表示します。 添付画像は`header.txt`の内容("string1")が表示された実行結果を示しています。

 

Go言語でhtmlからの文字の部分的取得

/** Geminiが自動生成した概要 **/
Go言語でWebページから本文を抽出するプログラムの説明です。`https://saitodev.co/article/%E3%83%A4%E3%83%96%E3%82%AC%E3%83%A9%E3%82%B7%E3%81%AE%E5%9F%B7%E5%BF%B5` から、`<div class="post-content">` と `<!-- .post-content -->` で囲まれた本文を抽出します。`bufio.NewReader` でHTMLを一行ずつ読み込み、`strings.Index` で "post-content" を検索。開始タグを見つけたら `readMode` フラグをtrueにして本文を `content` 変数に蓄積、終了タグを見つけたらループを抜けます。抽出した本文は `test.html` ファイルに保存されます。

 

Go言語で文字列操作

/** Geminiが自動生成した概要 **/
Go言語でHTML内のimgタグのsrc属性を書き換える方法をコード例を用いて説明しています。`strings.Replace`関数を用いて``属性と不要な `/` を除去し、`regexp.MustCompile`と`ReplaceAllString`を用いて`/site/files[数字]/`部分を`./files/`に置換しています。具体的には、まず``を空文字列に、`/>`を`>`に置換します。そして正規表現`/site/files[0-9]*?/`にマッチする部分を`./files/`に置換することで、画像パスを相対パスに変更しています。

 

Go言語で特定のサイトの複数の画像を取得する

/** Geminiが自動生成した概要 **/
Go言語で特定サイトから複数画像を取得する処理を解説しています。まず、対象ページのHTMLを取得し、正規表現を用いて`img`タグの`src`属性から画像パスを抽出します。抽出したパスは`/site/files`を含むものだけをスライスに格納します。次に、スライス内の各パスに対して、サイトのドメインを付加して完全なURLを生成し、`http.Get`で画像データを取得します。取得したデータは`ioutil.ReadAll`でバイト型に変換後、ファイル名を取得するためにパスの最後の`/`以降の文字列をファイル名として新規ファイルを作成し、画像データを書き込み保存します。

 

Go言語でHTMLのイメージタグから画像を取得

/** Geminiが自動生成した概要 **/
Go言語でHTMLのimgタグから画像を取得し、ファイル保存するコードの説明です。正規表現でsrc属性値を取得し、ファイル名を抽出し、URLを完成させます。HTTP GETリクエストで画像データを取得し、ファイルを作成して書き込みます。具体的な例として、`<img src="/site/files10/P5100314.JPG" ...>`から`P5100314.JPG`という名前で画像ファイルを保存する手順を解説しています。 コードは`https://saitodev.co`をベースURLとして使用し、`ioutil.ReadAll`でレスポンスボディ全体を読み込み、`os.Create`と`file.Write`でファイルに書き込んでいます。

 

Go言語でWebサイトから画像のデータを取得

/** Geminiが自動生成した概要 **/
Go言語でWebサイトから画像を取得し、ローカルに保存する方法を解説しています。`http.Get`で指定URLの画像データを取得し、`ioutil.ReadAll`でレスポンスボディをバイトスライスとして読み込みます。`os.Create`で新規ファイルを作成し、`file.Write`で取得したバイトデータを書き込むことで、画像ファイルを保存します。サンプルコードでは"植物のミカタ"の画像URLを使用し、"sample.jpg"として保存しています。記事では、HTTP GETリクエストとファイル作成の基本についても触れており、関連する記事へのリンクも提供しています。

 

Go言語でファイル作成

/** Geminiが自動生成した概要 **/
Go言語でファイルを作成する方法を解説しています。まず、`os.Stat`でファイルの存在確認を行い、存在しなければ`os.Create`で作成、存在すれば`os.Open`で開きます。`defer file.Close()`で確実にファイルを閉じ、`[]byte`に変換した文字列を`file.Write`で書き込みます。次に、`os.Stat`でディレクトリの存在確認を行い、なければ`os.Mkdir`で作成します。`filepath.Abs(".")`で現在のディレクトリを取得し、`os.Chdir`で作成したディレクトリに移動してから、上記と同様にファイルを作成・書き込みます。結果として、指定したディレクトリにファイルが作成されます。

 

Go言語で構造体のメソッド

/** Geminiが自動生成した概要 **/
Go言語のメソッドは、特定の型に紐づく関数です。`sample.go`で`Person`構造体を定義し、`Greet()`メソッドを実装します。`Greet()`メソッドは`Person`型のポインタ`*Person`をレシーバーとして受け取ります。`main.go`で`Person`型の変数`ryoko`を作成し、`ryoko.Greet()`と呼び出すことでメソッドを実行します。メソッド内では、レシーバー`p`を通して`Person`のフィールド(例:`p.Name`)にアクセスできます。初期実装では「こんにちは」と表示されますが、`fmt.Println(p.Name + "さん、こんにちは")`と変更することで「りょうこさん、こんにちは」と表示できます。

 

Go言語で構造体

/** Geminiが自動生成した概要 **/
Go言語では、`type`キーワードで構造体(`struct`)を定義できる。構造体は複数の型の値をまとめたもので、例えば`Person`構造体に`id`、`name`、`reading`フィールドを持つ。`main`関数で`Person`型の変数`ryoko`を宣言し、値を代入して出力できる。構造体のフィールドへは`.`でアクセスする。また、構造体はパッケージに含めることができ、`sample`パッケージに`Person`構造体を定義し、`main`関数で`import`して`sample.Person`として利用できる。パッケージ内の構造体を利用する場合、フィールド名の最初の文字は大文字にする必要がある。

 

Go言語でマップ(連想配列)

/** Geminiが自動生成した概要 **/
Go言語のマップは、キーと値のペアを格納する連想配列です。`map[KeyType]ValueType`で宣言し、`make`関数で初期化します。 キーを指定して値にアクセス (例: `m["name"]`) し、`for...range`ループで全てのキーと値を反復処理できます。上記例では、文字列キーと文字列値のマップを作成し、"name":"Tuyoshi"、"reading":"Saito"を格納、表示しています。 `fmt.Println(m)`でマップ全体、`fmt.Println(m["name"])`で特定の値、`for k, v := range m { fmt.Println(k + ":" + v) }`でキーと値を順に表示します。

 

Go言語でスライス(可変長配列)

/** Geminiが自動生成した概要 **/
Go言語の可変長配列(スライス)は`[]int`で宣言し、`make([]int, 10)`で要素数10の配列を作成する。`s[4] = 5`で5番目の要素に5を代入。要素を追加するには`append`関数を使う。`append(s, 9)`で9を追加。複数の値(例: 5, 3, 7)を追加する場合は、別のスライス`s2`を作成し、`append(s, s2...)`のように`...`を使って展開して追加する。

 

Go言語で配列

/** Geminiが自動生成した概要 **/
Go言語で配列を扱う方法を示すコード例です。10個の文字列を格納できる配列`array`を宣言し、"ryoko"、"usako"、"kumata"を初期値として代入しています。`fmt.Println(array)`で配列全体、`fmt.Println(array[1])`で特定の要素を表示できます。`for i:=0; i<10; i++`のような通常のforループに加え、`for i, v := range array`を使うことで、インデックス`i`と値`v`を取得しながら配列の各要素にアクセスできます。インデックスが不要な場合は`for _, v := range array`と記述します。

 

Go言語で繰り返し

/** Geminiが自動生成した概要 **/
Go言語の`for`ループは様々な繰り返し処理を実現する。`for i := 0; i < 10; i++` のように初期値、条件、増分を指定する一般的な方法に加え、`for {}`と`break`を組み合わせた無限ループも可能。`i += 1`は`i++`と同じくインクリメントを意味する。二重ループで九九の計算も容易に実現できる。外側のループ変数 `i`、内側のループ変数 `j` を用いて `fmt.Println(i * j)` で結果を表示する。

 

Go言語でHTTPのPOST

/** Geminiが自動生成した概要 **/
Go言語でChatWork APIを用いてマイチャットにメッセージをPOSTする手順を紹介。 `http.NewRequest`でPOSTリクエストを作成し、ChatWork APIトークンをヘッダーに設定、`http.DefaultClient.Do`でリクエストを送信する。記事では"GOからのテスト投稿"というメッセージを送り、レスポンスコード200を確認することで成功を確認している。 また、ChatWork APIのルームID、トークンの取得方法については別記事を参照している。

 

Go言語でHTTPのGET

/** Geminiが自動生成した概要 **/
Go言語でHTTP GETリクエストを実行する方法を解説しています。`net/http`パッケージの`Get`関数で指定URLにアクセスし、レスポンスを取得します。`ioutil.ReadAll`でレスポンスボディを読み込み、`string`型に変換してHTML内容を表示します。エラー処理も実装し、最後に`response.Body.Close()`でクローズします。記事では、各段階の出力を示しながら、最終的にHTMLを取得するコードを完成させています。

 

Go言語でユニットテスト

/** Geminiが自動生成した概要 **/
Go言語では、関数の動作を検証するためにユニットテストを行います。テストコードの作成には、以下のような手順があります。1. テストしたい関数の前に「Test」を付け、テスト関数を作成する。2. テスト関数に「(t *testing.T)」パラメータを渡す。3. 関数の引数と期待される値を設定する。4. 関数を実行し、期待される値と実際の結果を比較する。テストを実行すると、「ok」または「FAIL」が出力されます。「ok」はテストが成功したことを示し、「FAIL」はテストが失敗したことを示します。テストを失敗させるには、期待される値と実際の結果を意図的に不一致にします。この場合、テスト結果は次のように表示されます。```--- FAIL: TestJudgeEo (0.00s)func_test.go:10: 5は奇数なのでfalseを返さなければいけない```

 

Go言語で制御構文のif文

/** Geminiが自動生成した概要 **/
Go言語のif文は条件が真か偽かを判定する制御構文です。変数iが5ならば「iに格納されている文字は5」と表示する例が示されています。==は等価性を表し、!=は不一致を表します。else ifステートメントは複数の条件を処理するために使用できます。elseは、他のすべての条件が失敗した場合に実行されるブロックです。例では、str変数にtestまたはhogeが含まれているかどうかがチェックされ、それ以外の場合は「strに格納されている値はtestもhogeでもありません」と表示されます。最後に、偶数か奇数かを判定する関数を示し、iが偶数であればtrue、奇数であればfalseを返します。

 

Go言語でpackage

/** Geminiが自動生成した概要 **/
Go言語のpackage機能は関数をまとめて再利用や配布を可能にする。package名は作成するフォルダ名と同じにする。同じ階層のpackageを読み込むにはimport "./パッケージ名"を使用する。package内に複数の関数があっても、呼び出すときに指定する必要はない。また、Go言語には最初から組み込まれたpackage(例えばtime package)があり、それらを利用することもできる。

 

Go言語で関数

/** Geminiが自動生成した概要 **/
Go言語では、関数は `func` キーワードを使用して作成され、引数とその型を定義できる関数です。関数は、エントリーポイントである `main` 関数から呼び出されます。整数同士の和を表示する関数 `sum` を作成する場合、関数は次のようになります。```gofunc sum(i int, j int) int {return i + j}```返り値がある関数は、その型を関数シグネチャに指定します。たとえば、`sum` 関数は `int` 型の値を返します。複数の値を返す関数は、関数シグネチャにタプルの型を指定します。たとえば、`sum` 関数が和とブール値を返す場合、そのシグネチャは次のようになります。```gofunc sum(i int, j int) (int, bool)```

 

Go言語で変数

/** Geminiが自動生成した概要 **/
Go言語で変数の使い方を解説しています。整数型(int)は数値、文字列型(string)はダブルクォートで囲みます。実数型(float64)は小数点を含む数値、論理値型(bool)はtrue/falseを扱います。変数を宣言し、値を代入し、print関数で表示します。値を代入しないbool型変数はfalseになります。

 

Go言語でHello World

/** Geminiが自動生成した概要 **/
Go言語で"Hello World"を表示する方法を解説。Go環境設定後、workspace内のgoディレクトリにmain.goファイルを作成する。`package main`と`func main(){}`は必須。`print("Hello World")`を{}内に記述し、Ctrl+Shift+Bで実行すると"Hello World"が表示される。Atomの設定でBを押すと実行されるよう設定されている。 別の方法として、MINGW64などのコマンドラインから`go run main.go`を実行しても"Hello World"が表示される。

 

妻にプログラミングを教えることにした-後編

/** Geminiが自動生成した概要 **/
妻にGo言語を教えることにした。プログラミングを教えることで、教える側も理解を深め、学習効率が上がるためだ。Go言語を選んだ理由は、初心者にも扱いやすい点が多いからである。go runでLL言語のように手軽に実行でき、go buildでコンパイルもできる。システムプログラミングにも触れられるため、コンピュータの仕組み理解に役立つ。go fmtやgo importによる自動整形・補完でコードの書き方に迷うことも少ない。また、オブジェクト指向がないため学習コストが低い。冗長になりやすい、他言語学習時に混乱する可能性があるという欠点はあるものの、プログラミング入門には最適だと考える。妻の変化が楽しみだ。

 

妻にプログラミングを教えることにした-前編

/** Geminiが自動生成した概要 **/
妻にプログラミングを教えるのは、SOY Shop開発への協力を期待しているからではなく、プログラミングを通して「相手に的確に指示を伝える能力」を身につけてほしいからだ。事務職希望者が多い一方、経営者側は事務作業をコストと捉える現状がある。プログラミングは、パソコンを部下に見立て、明確な指示を出す訓練となる。これは事務作業の効率化にも繋がる。また、電話での行き違いによる業務の非効率性を指摘し、プログラミング的思考で事前に情報を整理し伝えることの重要性を説く。最終的には、どんな業種でも発生する事務作業を効率化し、円滑なコミュニケーション能力を養うことが目的である。

 

レバテックキャリアさんの技術ブログで当ブログのGo言語の記事が紹介されました

/** Geminiが自動生成した概要 **/
レバテックキャリアの技術ブログで、筆者のGo言語のユニットテスト記事が紹介された。紹介記事はGo言語学習者向けのおすすめ記事まとめで、筆者の記事はテストコード作成フローの実例紹介が評価された。IT・Web系転職サイトに栽培系ブログが掲載されたことは、デジタルとアナログ業界の橋渡しとして意義深い。筆者は今後、両業界の利点を融合させる役割を目指している。追記として、レバテックキャリアと同じ運営会社が、フリーランス向け案件紹介サイト「フリーランスHub」を立ち上げたことが紹介されている。フリーランスHubでは、地域やリモートワークなど様々な条件で業務委託案件を検索できる。

 

WindowsでGo言語

/** Geminiが自動生成した概要 **/
Windows 10でGo言語開発環境を構築する手順をまとめた記事です。Git、Go、Atomエディタをインストールし、日本語化やGo開発に必要なパッケージを追加します。AtomでGoファイルを作成し、"hello world"を出力するサンプルコードの実行までを解説しています。Go言語のバージョンは1.9.4、Windowsは64bit版を使用しています。最後に、アンチウイルスソフトの設定が必要になる場合があることに触れています。

 

COMODO Internet Securityを利用しながらGoで書かれたプログラムを実行する

/** Geminiが自動生成した概要 **/
COMODO Internet SecurityがGoプログラムの実行をブロックする問題への対処法。COMODOの「アプリケーションのブロック解除」画面で、ブロックされたGoプログラムにチェックを入れ、「すべてのセキュリティコンポーネントのブロックを解除する」を選択する。これでAtomからの実行は可能になる。ただし、go buildで作成したバイナリは実行毎にブロックされるため、Goバイナリを無条件で実行する方法については未解決。

 

SOY CMSに総当り攻撃を仕掛けてみる。その2

SOY CMSに総当り攻撃を仕掛けてみる。その1前回、Go言語でSOY CMSに対して総当り攻撃の初期段階のコードを書いてみた。※初期段階:ログインを一度試すだけのコードしかし、ログインフォームにトークンのチェックを実装したことにより、あっけなく無効化した。ということで、今回は前回実装したトークンのチェックを通過するように書いてみる。まずトークンのチェックは何かだけど、SOY CMSであれば、管理画面のURLを特定したい

 

SOY CMSに総当り攻撃を仕掛けてみる。その1

SOY CMSで総当たり攻撃に対応してみた以前、SOY CMSに総当たり攻撃を受けた場合は通知を送信するという機能を実装しましたが、そもそも総当たり攻撃はどうやってやるの?ということで、書いてみることにする。手順としては、・IDとパスワードの対が大量にある辞書データを用意する(ここは省略)・何度もログインのPOSTを行うプログラムを用意する・辞書データを元に何度もログインのPOSTを送信し続けるというわけで、POSTのプログラムを用意すれば対応できると

 

Go言語で認証鍵を使ってSSHの接続を行う

Go言語でサーバのバックアップの仕組みを作ろう。SSH編前回、Go言語でSSHでリモートアクセスするコードを書いた。とは言っても、パスワード形式だけだと使えないサーバが多いだろうから認証鍵によるアクセスのコードも調べてみる。package mainimport ("log""golang.org/x/crypto/ssh")func main() {ip := "***.***.***.***" //サーバのアドレスp

 

Go言語でサーバのバックアップの仕組みを作ろう。SSH編

Go言語でサーバのバックアップの仕組みを作ろう。ファイルの更新編先日から勉強を兼ねて書いているSambaのサーバからLANの他のパソコンにファイルをコピーするプログラムだけど、書いている時に気がついたけど、Go言語でSSHでSambaサーバに接続できたとしても、ローカルマシンの様にWalkは使えないんじゃね?って。端末からリモートアクセスしたら、コマンドかシェルスクリプトしか使えないんじゃないか?ということで、バックアップの仕組みは軌道修正。Sambaサー

 

Go言語でサーバのバックアップの仕組みを作ろう。ファイルの更新編

Go言語でサーバのバックアップの仕組みを作ろう。Walk編前回、同一のパソコン間で、あるディレクトリをまるまるバックアップするスクリプトを書いた。その時、ディレクトリをWalkという関数で再帰的に調べてディレクトリやファイルをコピーした。前回のコードではファイルのコピーは必ず行うという無駄な処理が多いため、今回はファイルの更新日時を調べて、バックアップ元の方が新しければコピーを行うという処理を追加してみることにした。Walkで再帰的に調べて

 

Go言語でサーバのバックアップの仕組みを作ろう。Walk編

使わなくなったパソコンにSambaを入れて、ファイル共有用のサーバを構築してみたでLAN内のパソコン用のファイルサーバを構築してしばらく経過した。そろそろ重要なファイルが保管される様になってきたので、サーバのバックアップをとらないと不安になってきたわけで、バックアップの検討を始めた。サーバのPCにもうひとつハードディスクを搭載してバックアップも良いけど、やっぱり他のPCに保管しておきたくなるので、LAN内の他のPCにバックアップするためのコードを書いてみることにし

 

土壌分析アプリsoil2 by Go

最近、土壌分析の各値が植物学的にみてどのような影響があるのか?という話をする機会が増えた。(土壌分析の話ではない)土壌分析で施肥の癖を知る話はしたはいいが、土壌分析を行う人が増えると何かと大変らしい。土壌分析の測定後の入力が手間らしく、それを軽減できたらもっと行う人が増えるだろうと。ということで、各値を入力したら、こんな感じでグラフ化するWebアプリを開発しました。(公開形式については身内のみ公開にする予定です)

 

Goのgoroutineで平行処理を試してみる

時代はマルチコアマルチコア - Wikipedia一つのCPUに見せかけて、複数のCPUが搭載されているのが今のパソコンの主流せっかくマルチコアなんだし、プログラミングもマルチコアを活かしたいということで、Go言語のgoroutine(並行処理)を試してみた。これで平行処理もばっちりだ。平行計算 - Wikipediaと言うわけで、平行処理の練習と解釈の意味を込めて、ここにメモを残す本来、プログラミングは書いたコードを上から

 

GoでGETを使ってHTMLを文字列で取得してみる

プログラミングで基礎的な内容を調べようとネットで検索してみると、引っかかるのは〇〇のライブラリを使ってみたといったものばかり。開発をする上で、ライブラリの利用は確かに最短で良いけど、商売をしていく上での革命的な決定打ってそういう表層の情報ではないじゃん。知りたいのはもっとピュアな箇所だよということで、今回はGo言語のhttpパッケージにあるGet関数で、URLを指定して、HTMLを文字列として取得するまでを書いてみた。自分用のメモとして

 

golangでテストを書いてみたのでメモ

golang(Go言語)ではテストが標準で用意されており、テストコードを書くのが簡単ということで書いてみた。まずはgoというフォルダを作成して、sample.goというファイルを作成してみた。go└── sample.goディレクトリ構造はこんな感じ。sample.goに下記の様なランダムな文字列を作成して、作成した文字列をMD5でハッシュ化して表示するというコードを用意した。package mainimport ("fmt""cryp

 

Golangのsessionの取り扱いの際の型で苦戦した

今後のことを考え、PHPでの開発はSOY Shopを動かす時ぐらいにして、主力はGolangに移していきたいなとコードを書いていたところ、Golangで立てたWebサーバでのセッションの取り扱いで苦戦した。セッションとかはさすがPHP!Webアプリ専用の言語だけあってよくできてる。前置きはここまでにしておいて、今回Golangで苦戦した箇所をメモとして残しておくGolangの現在のバージョン(1.5.2)では、標準でセッションを扱うためのライブラリはない。そこで、

 

Goで一方向ハッシュ関数によるパスワードの暗号化を書いてみた

普段の帳簿周りを自動化したいから、自分ら用にちょっとしたアプリを作ることにした。せっかくの機会なので、Goで一方向ハッシュ関数によるパスワードの暗号化を書いてみたので、勉強がてらメモを残しておく。Go (プログラミング言語) - Wikipedia暗号学的ハッシュ関数 - Wikipedia一方向ハッシュ関数とは、アプリでアカウント登録の際にパスワードの設定をしてもらうでしょ。それをそのままサービス側のデータベースに保存すると危ないので、入力したパスワ


Powered by SOY CMS  ↑トップへ