[JP] go-sn - Go で適当なシリアルナンバーを生成で きるケージを作った
12604 단어 opensourceshowdevgo
なぜ作たのか
趣味で開発しているツルの仕様に、 一定のルールに基づいて ID を生成する という機能があったので、その実装をパッケージとして切り出してみました.
https://github.com/kenkyu392/go-sn
初動ではこれぐらいしか考えていなかったので、とりあえず生成ルールールをcastamできる設計ならいいかな.ぐらいの気持ちで作りました.
使い方
使い方は rule.Rule を設定した sn.Generator を作成して
String
メソddを呼び出すだけです.package main
import (
"fmt"
"github.com/kenkyu392/go-sn"
"github.com/kenkyu392/go-sn/rule"
)
func main() {
// ジェネレータを作成する
g := sn.NewGenerator(
// アルファベット (a-zA-Z)
rule.RandomAlphabet(4),
// 数字 (0-9)
rule.RandomNumeric(4),
// アルファベット & 数字 (a-zA-Z0-9)
rule.RandomAlphabetAndNumeric(4),
// 0パディング付きの連番
rule.NumberingWithPadding(4),
)
for i := 0; i < 5; i++ {
// 生成する
fmt.Println(g.String())
}
}
この코드の実行結果はこのようになります.
tkaZ-9232-V1O4-0000
BlGE-1371-2Yz5-0001
nhoJ-2399-ecHE-0002
pECW-7494-52n7-0003
ZpxT-3040-DOKd-0004
ジェネレータの区切り文字を変更する
区切り文字は sn.Generator.Delimiter に好きな文字列を設定するだけで変更できます.
csv.Writer.Comma のように
rune
型にしようと思いましたが、今回は複数文字渡せるようにしました.g.Delimiter = "_"
규칙
Rule
とは、 Generator
の 1 ブロックを生成する機能を実装したものです. Generator
は設定された Rule
を Delimiter
で結合して ID を生成ま.このパッケージには標準で 用できる
Rule
がいくつか実装されているので, 一部を紹介します.란담な文字列を使用する
// a-ZA-Z のアルファベットをランダムに使用する。
rule.RandomAlphabet(4)
// A-Z のアルファベットをランダムに使用する。
rule.RandomUppercaseAlphabet(2)
// a-Z のアルファベットをランダムに使用する。
rule.RandomLowercaseAlphabet(2)
// 0-9 の数字をランダムに使用する。
rule.RandomNumeric(2)
// a-ZA-Z0-9 のアルファベットと数字をランダムに使用する。
rule.RandomAlphabetAndNumeric(2)
連番을 사용하는
// 連番を使用する。
rule.Numbering()
// 0 でパディングされた連番を使用する。
rule.NumberingWithPadding(4)
この連番の
Rule
は、 rule.Counter を用用する ことで カスタマイズできます.c := &rule.Counter{
// 5 から開始する
Start: 5,
// 2 ずつインクリメントする
Size: 2,
// 6 桁でパディングする
Padding: 6,
}
목록을 사용하는
// リストの文字列をランダムに使用する。
rule.RandomList(
[]string{"Dog", "Cat", "Fox", "Rat"},
)
複数の Rule を組み合わせる
rule.Mixin を使用することで、複数の
Rule
を結合して使用する ことができます.例えば、以下のように設定した場合、
sn.NewGenerator(
rule.Mixin(
rule.RandomUppercaseAlphabet(2),
rule.RandomLowercaseAlphabet(2),
rule.RandomNumeric(2),
),
rule.NumberingWithPadding(4),
)
このような実行結果になります.
FMra02-0000
PPgw98-0001
DPqo51-0002
AGrh11-0003
XLfv53-0004
카스탐 Rule を使用する
Rule
はshinplな関数なので、独自の Rule
を簡単に作成できます.sn.NewGenerator(
func() []rune {
return []rune("PREFIX")
},
rule.NumberingWithPadding(4),
)
その他
このパッケージは本来の ID 生成以外にもダミーデータの生成などで用できます.
例えば, 以下のようなルールを設定すれば, meerruadressnodamiーde-taを生成できます.
package main
import (
"fmt"
"github.com/kenkyu392/go-sn"
"github.com/kenkyu392/go-sn/rule"
)
func main() {
g := sn.NewGenerator(
rule.Mixin(
rule.RandomAlphabet(4),
rule.String("."),
rule.RandomAlphabetAndNumeric(6),
),
rule.RandomList(
[]string{
"example.com",
"example.net",
"example.org",
},
),
)
g.Delimiter = "@"
for i := 0; i < 5; i++ {
fmt.Println(g.String())
}
}
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
まとめ
shinplude用途も限られる簡単な팍케이지ですが、良ければ使ってみてください.
まだ作ったばかりで機能が少ないので、
Rule
の追加やご指摘など콘트리뷰트도 お待ちしてます.https://github.com/kenkyu392/go-sn
Reference
이 문제에 관하여([JP] go-sn - Go で適当なシリアルナンバーを生成で きるケージを作った), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kenkyu/jp-go-sn-go-deshi-dang-nasiriarunanbawosheng-cheng-dekirupatukeziwozuo-tuta-4ja5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)