Más contenido relacionado
Similar a 認証Gwのプロトタイプでgolang使ってみた20171024 (20)
認証Gwのプロトタイプでgolang使ってみた20171024
- 3. 自己紹介
2
■ 氏名 納村 康司(おさむら こうじ)
@osakichi(Twitter)、osakichi(GitHub)
■ 所属 かもめエンジニアリング株式会社
http://kamome-e.com/
■ 役割 取締役・技術者
■ 事業内容 コンピュータソフトウェアおよびハードウェアの
研究、開発、販売、サポート (主に認証関係)
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
- 4. かもめの活動分野
3
■ 製品分野 通信事業者・企業向けの
認証パッケージソフトウェアおよびソリューション
■ 主力製品 アプリSSO認証ソリューション「KAMOME SSO」
統合認証基盤「KFEP」
RADIUS認証サーバ「Fullflex」、などなど
■ 開発言語 Java、C++、C、ちょっとJavaScriptやPython
Golangは社内/社外に布教中
(他社から引き継いだ「Fullflex」はGolangだけど)
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
- 9. 構成概念図
8Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
フロント
アプリ
(既存)
認証GW(開発範囲)
API
受付
ID/PW認証
対応モジュール
OTP認証サーバ
(他社製品)
指紋認証サーバ
(他社製品)
OTP認証
対応モジュール
指紋認証
対応モジュール
ID/PW認証サーバ
(既存)
・
・
・ ・
・
・
共通API
認証方式ごとに
対応モジュールに
処理を振り分け
認証方式の
追加は
モジュールの
追加で対応
認証方式固有の
プロトコル処理は
対応モジュールで処理
フロントアプリからは
何れの認証方式も
共通のAPIで利用
- 16. はまりケース1(1)
15Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "fmt"
func main() {
x := "Hello World!" // 初期値
if true { // 何らかの条件文(とりあえず常にtrue)
x := "different≠another" // 条件により値置き換え
}
fmt.Println(x)
}
■ :=演算子は便利だけど、 LL感覚で多用すると危険
■ 結果が"different≠another"にならない???
コンパイルエラーも出ないので発見しづらい
- 17. はまりケース1(2)
16Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "fmt"
func main() {
var x = "Hello World!" // 初期値
if true { // 何らかの条件文(とりあえず常にtrue)
x = "different≠another" // 条件により値置き換え
}
fmt.Println(x)
}
■ 変数スコープの問題だけど明示的にvarを書いた方が無難
■ これで結果が"different≠another"と意図したものになった
(型推論ぐらいは使ってもいいかも)
- 19. はまりケース2(1)
18Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "bufio"
import "encoding/json"
import "os"
func main() {
var data interface{}
reader := bufio.NewReader(os.Stdin)
json, _, _ := reader.ReadLine() // JSONデータをキー入力して
json.Unmarshal(json, &data) // 内部データに変換
}
■ importしているパッケージが使えない?
■ コンパイラに「json.Unmarshal()が無い」と怒られる
- 20. はまりケース2(2)
19Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "bufio"
import "encoding/json"
import "os"
func main() {
var data interface{}
reader := bufio.NewReader(os.Stdin)
raw, _, _ := reader.ReadLine() // JSONデータをキー入力して
json.Unmarshal(raw, &data) // 内部データに変換
}
■ パッケージ名と被る変数名は使わない(まぁあたりまえ)
■ どうしても特定の名前を変数で使いたい場合は、
パッケージ名の方を変える方法もあるらしい