April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
氏名、住所、クレジットカード番号といった個人情報や、顧客情報や仕入先のリストなどの機密情報は注意深く扱う必要があります。
このような情報をGoで扱う場合、構造体のフィールドとして扱うと思いますが、そのフィールドを含む項目が fmt.Printf("%v", credentials) のようなコードでログへ出力されてしまい、内容がアクセスする必要のない人にまでもれてしまう恐れがあります。
このような事故を避けるために、ログの内容をマスキングして出力させたいことがあると思いますが、Goの独自型を利用することで機密情報を含む項目を扱いやすくする方法を紹介します。
次に示すfmtパッケージのインタフェース2つを満たすことで、誤ってログへ出力されると困る項目の出力書式をカスタマイズできます。
Stringer
GoStringer
それぞれの定義は以下のようになっています。
type Stringer interface {
String() string
}
type GoStringer interface {
GoString() string
}
このインタフェースを用いて拡張することで、たとえばクレジットカードのように注意深く扱う必要のある機密情報のログ出力を、ダミー値に置き換えられます。
package main
import (
"encoding/json"
"fmt"
)
type ConfidentialCustomer struct {
CustomerID int64
CreditCard CreditCard
}
type CreditCard string ...Read now
Unlock full access