現在ほとんどのシーンでは長接続が一般的で、さまざまな目的(SMS などのプラットフォームの文字制限)により短縮リンクが生成されました。
短縮リンク生成#
- ハッシュアルゴリズムを使用して生成
- 発行器を使用して生成
両者は最終的に base アルゴリズムを通じて長さを減少させることができます。
ハッシュアルゴリズム生成#
ハッシュ衝突の可能性があります。
// 1.hash
func GenerateShortenUrl(initUrl, userID string) string {
// 256で暗号化
urlSHA256 := sha256f(initUrl + userID)
genNum := new(big.Int).SetBytes(urlSHA256).Uint64()
// base 58は誤解を招く文字 o,O,I,lおよび+,/を含まない
// 文字の長さを減少させる
return base58Encoded([]byte(fmt.Sprintf("%d", genNum)))[0:8]
}
func sha256f(input string) []byte {
hashed := sha256.Sum256([]byte(input))
return hashed[:]
}
func base58Encoded(input []byte) string {
encoded, err := base58.BitcoinEncoding.Encode(input)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
return string(encoded)
}
発行器生成#
雪花アルゴリズムを使用して ID を生成します。
リダイレクト#
一般的には
302
リダイレクトを使用し、301
永続的リダイレクトはブラウザにキャッシュを残し、短縮リンクの統計データを取得できません。