最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中實現(xiàn)數(shù)據(jù)脫敏處理的go-mask包分享

 更新時間:2023年05月23日 16:46:43   作者:Go學堂  
這篇文章主要是來和大家分享一個在輸出中對敏感數(shù)據(jù)進行脫敏的工作包:go-mask,可以將敏感信息輸出的時候替換成星號或其他字符,感興趣的小編可以跟隨小編一起了解下

今天給大家推薦一款在輸出中對敏感數(shù)據(jù)進行脫敏的工作包:go-mask。

那么,什么是對敏感數(shù)據(jù)脫敏呢?就是將敏感信息輸出的時候替換成星號或其他字符。比如手機號碼,身份證信息,姓名等。

go-mask包還是比較新的,是在兩周前提交的。所以星標只有71個。星標雖少,但功能還是很強大的。我們看看go-mask都有哪些功能。

特征

  • 通過結構體的tag功能可以脫敏結構體中的任何字段
  • 除了使用go-mask的內置的脫敏函數(shù)外,用戶還可以自定義脫敏函數(shù)。

支持的tags標簽

go-mask只提供了有限的幾個tags。原因是用戶可以根據(jù)需要自定義脫敏函數(shù)。以下是go-mask支持的tags:

tagtype描述
mask:"filled"string輸出和原字符串相同個數(shù)的脫敏字符。例如:原字符串是4個字符,那么就輸出4個星號:****
mask:"filledXXX"stringXXX是脫敏字符的個數(shù)。即輸出XXX個脫敏字符。例如:mask:"filled3"代表最終輸出"***"
mask:"fixed"string輸出固定個數(shù)的脫敏字符,默認是8個字符。例如:********
mask:"hash"string對原字符串使用sha1哈希輸出
mask:"randomXXX"int / float64XXX代表數(shù)字值。將原值轉換成0-XXX之間的隨機值輸出
mask:"zero"any輸出對應類型的零值

如何使用

對字符串類型脫敏

package main
import (
	"fmt"
	mask "github.com/showa-93/go-mask"
)
func main() {
	maskValue, _ := mask.String(mask.MaskTypeFixed, "Hello World!!")
	fmt.Println(maskValue) //輸出固定的8個脫敏字符: ********
}

對結構體中的string類型字段進行脫敏處理。如下:

package main
import (
	"fmt"
	mask "github.com/showa-93/go-mask"
)
func main() {
	value := struct {
		Title string   `mask:"filled"`
		Casts []string `mask:"fixed"`
	}{
		Title: "Catch Me If You Can",
		Casts: []string{
			"Thomas Jeffrey \"Tom\" Hanks",
			"Leonardo Wilhelm DiCaprio",
		},
	}
    maskValue, _ := mask.Mask(value)
	fmt.Printf("value:%+v\n", value)
	fmt.Printf("maskValue:%+v\n", maskValue) //脫敏字符輸出符號是:*
    masker := mask.NewMasker()
	masker.SetMaskChar("-") //自定義脫敏字符為 - 
    // 給對應的tag注冊對應的脫敏處理函數(shù)
	masker.RegisterMaskStringFunc(mask.MaskTypeFilled, masker.MaskFilledString)
	masker.RegisterMaskStringFunc(mask.MaskTypeFixed, masker.MaskFixedString)
	maskValue2, _ := masker.Mask(value)
	fmt.Printf("maskValue2:%+v\n", maskValue2)
}

輸出結果如下:

value:{Title:Catch Me If You Can Casts:[Thomas Jeffrey "Tom" Hanks Leonardo Wilhelm DiCaprio]}
maskValue:{Title:******************* Casts:[******** ********]}
maskValue2:{Title:------------------- Casts:[-------- --------]}

對int/float64類型字段脫敏

對int/float64類型的字段一般使用mask:"randomXXX"的標簽,表示轉換成從0到XXX的隨機數(shù)。如下:

package main
import (
	"fmt"
	mask "github.com/showa-93/go-mask"
)
func main() {
	{
		maskValue, _ := mask.Int("random100", 10)
		fmt.Println(maskValue)
	}
	{
		maskValue, _ := mask.Float64("random100.2", 12.3)
		fmt.Println(maskValue)
	}
	{
		value := struct {
			Price   int     `mask:"random1000"`
			Percent float64 `mask:"random1.3"`
		}{
			Price:   300,
			Percent: 0.80,
		}
		masker := mask.NewMasker()
		masker.RegisterMaskIntFunc(mask.MaskTypeRandom, masker.MaskRandomInt)
		masker.RegisterMaskFloat64Func(mask.MaskTypeRandom, masker.MaskRandomFloat64)
		maskValue, _ := mask.Mask(value)
		maskValue2, _ := masker.Mask(value)
		fmt.Printf("%+v\n", maskValue)
		fmt.Printf("%+v\n", maskValue2)
	}
}

對應的輸出結果如下:

29
50.45
{Price:917 Percent:0.183}
{Price:733 Percent:0.241}

對slice類型脫敏處理

對slice類型的處理本質上還是對基礎類型的處理,類似于結構體或對應的string/int/float64類型。如下:

package main
import (
	"fmt"
	"github.com/showa-93/go-mask"
)
type Value struct {
	Name string `mask:"filled"`
	Type int    `mask:"random10"`
}
func main() {
	values := []Value{
		{
			Name: "Thomas Jeffrey \"Tom\" Hanks",
			Type: 1,
		},
		{
			Name: "Leonardo Wilhelm DiCaprio",
			Type: 2,
		},
	}
	masker := mask.NewMasker()
	masker.SetMaskChar("+")
	masker.RegisterMaskStringFunc(mask.MaskTypeFilled, masker.MaskFilledString)
	masker.RegisterMaskIntFunc(mask.MaskTypeRandom, masker.MaskRandomInt)
	maskValues, _ := mask.Mask(values)
	maskValues2, _ := masker.Mask(values)
	fmt.Printf("%+v\n", values)
	fmt.Printf("%+v\n", maskValues)
	fmt.Printf("%+v\n", maskValues2)
}

輸出如下:

[{Name:Thomas Jeffrey "Tom" Hanks Type:1} {Name:Leonardo Wilhelm DiCaprio Type:2}]
[{Name:************************** Type:8} {Name:************************* Type:9}]
[{Name:++++++++++++++++++++++++++ Type:4} {Name:+++++++++++++++++++++++++ Type:8}]

對map類型進行處理

對map類型的處理,是處理的map中的value,對key不做處理。如下:

package main
import (
	"fmt"
	"github.com/showa-93/go-mask"
)
type Value struct {
	Name string `mask:"filled"`
	Type int    `mask:"random10"`
}
func main() {
	values := map[string]Value{
		"one": {
			Name: "Thomas Jeffrey \"Tom\" Hanks",
			Type: 1,
		},
		"two": {
			Name: "Leonardo Wilhelm DiCaprio",
			Type: 2,
		},
	}
	masker := mask.NewMasker()
	masker.SetMaskChar("")
	masker.RegisterMaskStringFunc(mask.MaskTypeFilled, masker.MaskFilledString)
	masker.RegisterMaskIntFunc(mask.MaskTypeRandom, masker.MaskRandomInt)
	maskValues, _ := mask.Mask(values)
	maskValues2, _ := masker.Mask(values)
	fmt.Printf("%+v\n", values)
	fmt.Printf("%+v\n", maskValues)
	fmt.Printf("%+v\n", maskValues2)
}

輸出結果如下:

map[one:{Name:Thomas Jeffrey "Tom" Hanks Type:1} two:{Name:Leonardo Wilhelm DiCaprio Type:2}]
map[one:{Name:************************** Type:8} two:{Name:************************* Type:6}]
map[one:{Name: Type:6} two:{Name: Type:2}]

自定義脫敏函數(shù)

go-mask包還支持自定義的脫敏函數(shù)的處理。將定義好的函數(shù)通過mask.RegisterMaskStringFunc函數(shù)進行注冊即可。如下,定義了regexp標簽和MaskRegExp脫敏處理函數(shù):

package main
import (
	"fmt"
	"regexp"
	"strings"
	mask "github.com/showa-93/go-mask"
)
func init() {
	maskTypeRegExp := "regexp"
	mask.RegisterMaskStringFunc(maskTypeRegExp, MaskRegExp)
}
// MaskRegExp is sample to add a custom mask function
func MaskRegExp(arg, value string) (string, error) {
	var (
		reg *regexp.Regexp
		err error
	)
	reg, err = regexp.Compile(arg)
	if err != nil {
		return "", err
	}
	indexes := reg.FindStringSubmatchIndex(value)
	if len(indexes) >= 4 && indexes[2] >= 0 && indexes[3] >= 0 {
		var sb strings.Builder
		sb.WriteString(value[:indexes[2]])
		sb.WriteString(mask.MaskChar())
		sb.WriteString(value[indexes[3]:])
		return sb.String(), nil
	}
	return value, nil
}
func main() {
	mask.SetMaskChar("cat")
	type Hachiware struct {
		Message string `mask:"regexp(gopher)."`
	}
	input := Hachiware{Message: "I love gopher!"}
	got, _ := mask.Mask(input)
	fmt.Printf("%+v\n", input)
	fmt.Printf("%+v\n", got)
	// The Masker initialized with NewMasker does not have
	// any custom masking functions registered, so no masking will occur
	masker := mask.NewMasker()
	got2, _ := masker.Mask(input)
	fmt.Printf("%+v\n", got2)
}

輸出結果:

{Message:I love gopher!}
{Message:I love cat!}
{Message:I love gopher!}

好了,以上就是go-mask的主要功能。如果你的業(yè)務中有需要脫敏輸出的需求,推薦使用該包。

該包開源地址:https://github.com/showa-93/go-mask

到此這篇關于Golang中實現(xiàn)數(shù)據(jù)脫敏處理的go-mask包分享的文章就介紹到這了,更多相關Golang數(shù)據(jù)脫敏處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go語言題解LeetCode888公平糖果交換示例詳解

    Go語言題解LeetCode888公平糖果交換示例詳解

    這篇文章主要為大家介紹了Go語言題解LeetCode888公平糖果交換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 詳解Go語言中泛型的實現(xiàn)原理與使用

    詳解Go語言中泛型的實現(xiàn)原理與使用

    本文是對泛型的基本思想及其在?Go?中的實現(xiàn)的一個比較容易理解的介紹,同時也是對圍繞泛型的各種性能討論的簡單總結,感興趣的可以學習一下
    2022-05-05
  • go 下載非標準庫包(部份包被墻了)到本地使用的方法

    go 下載非標準庫包(部份包被墻了)到本地使用的方法

    今天小編就為大家分享一篇go 下載非標準庫包(部份包被墻了)到本地使用的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Go 并發(fā)實現(xiàn)協(xié)程同步的多種解決方法

    Go 并發(fā)實現(xiàn)協(xié)程同步的多種解決方法

    這篇文章主要介紹了Go 并發(fā)——實現(xiàn)協(xié)程同步的多種解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 詳解MongoDB?Go?Driver如何記錄日志

    詳解MongoDB?Go?Driver如何記錄日志

    這篇文章主要為大家介紹了MongoDB?Go?Driver如何記錄日志詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Go 熱加載之fresh詳解

    Go 熱加載之fresh詳解

    這篇文章主要為大家介紹了Go 熱加載之fresh詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • golang交叉編譯詳細

    golang交叉編譯詳細

    Golang 支持交叉編譯,在一個平臺上生成另一個平臺的可執(zhí)行程序,只需要按照我下面的這個環(huán)境變量表設置對應的環(huán)境變量就可以了,下面文章將對該內容做詳細介紹,感興趣的小伙伴可以參考一下
    2021-10-10
  • Go-家庭收支記賬軟件項目實現(xiàn)

    Go-家庭收支記賬軟件項目實現(xiàn)

    這篇文章主要介紹了Go-家庭收支記賬軟件項目實現(xiàn),本文章內容詳細,具有很好的參考價值,希望對大家有所幫助,需要的朋友可以參考下
    2023-01-01
  • 重學Go語言之如何開發(fā)RPC應用

    重學Go語言之如何開發(fā)RPC應用

    這篇文章主要為大家詳細介紹了在Go語言中如何構建RPC應用,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-09-09
  • Go語言的緩存策略與實現(xiàn)方法代碼示例

    Go語言的緩存策略與實現(xiàn)方法代碼示例

    在Go語言中緩存是一種常見的優(yōu)化技術,用于減少重復計算或I/O操作,提高程序性能,這篇文章主要介紹了Go語言緩存策略與實現(xiàn)方法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-04-04

最新評論

河津市| 潍坊市| 怀化市| 张家界市| 汉源县| 灯塔市| 临夏市| 右玉县| 新龙县| 阿拉尔市| 鲜城| 博客| 元谋县| 文水县| 吕梁市| 佳木斯市| 新宁县| 西藏| 桂林市| 北宁市| 建宁县| 定安县| 岗巴县| 太保市| 栾城县| 启东市| 玛沁县| 富源县| 措勤县| 苏尼特左旗| 乐业县| 榆社县| 清水河县| 安多县| 宁安市| 偃师市| 临泽县| 江油市| 哈尔滨市| 杭州市| 溆浦县|