[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.)