激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - Golang打包配置文件的實(shí)現(xiàn)示例

Golang打包配置文件的實(shí)現(xiàn)示例

2022-01-19 00:40K8sCat Golang

本文主要介紹了Golang打包配置文件的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

眾所周知,Golang 適合寫 CLI 工具,但你可能還不知道 Golang 還可以打包配置文件。

背景

最近在寫一個(gè)涉及到管理阿里云 ECS 的 CLI 工具,這里當(dāng)然就要考慮阿里云資源使用的安全性了,要求阿里云賬號(hào)的 AccessKeyId 和 AccessKeySecret 不能下發(fā)給 CLI 工具的使用者。

Golang打包配置文件的實(shí)現(xiàn)示例

所以這里選擇將一份包含 AccessKeyId 和 AccessKeySecret 的配置文件打包進(jìn)了 CLI 工具中,CLI 工具的使用者默認(rèn)將使用已經(jīng)打包了的配置文件,當(dāng)然也可以通過(guò)指定配置文件或傳遞參數(shù)的方式使用新的配置信息。

實(shí)現(xiàn)

工具

這里將介紹 Golang 的一個(gè)可以把任意文件轉(zhuǎn)換成 Go 代碼的庫(kù) go-bindata,可以用于嵌入二進(jìn)制文件到 Go 程序中。同時(shí),也支持在轉(zhuǎn)換成原始的字節(jié)切片前使用 gzip 進(jìn)行壓縮文件數(shù)據(jù)。
關(guān)于該工具的具體介紹請(qǐng)?zhí)D(zhuǎn)至 https://github.com/go-bindata/go-bindata

打包

使用 go-bindata 工具將包含敏感信息的配置文件轉(zhuǎn)換成 Go 的源代碼,下面是項(xiàng)目 Makefile 的部分內(nèi)容,工具名稱就叫 mycli 吧。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
NAME = mycli
CONFIG = configs/config.yaml
 
.PHONY: build
 
build:
    cp $(CONFIG) config.yaml
    mkdir -p cmd/mycli/asset
    go-bindata -pkg asset -o cmd/mycli/asset/asset.go \
        scripts/... \
        config.yaml
    
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/linux/mycli cmd/mycli/*.go
    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/darwin/mycli cmd/mycli/*.go
    
    chmod +x ./bin/linux/mycli ./bin/darwin/mycli
    rm -f config.yaml mycli
    ln -s bin/linux/mycli mycli

其中將文件轉(zhuǎn)換成 Go 源代碼的部分如下:

?
1
2
3
go-bindata -pkg asset -o cmd/mycli/asset/asset.go \
    scripts/... \
    config.yaml

關(guān)于 go-bindata 命令行工具的選項(xiàng)說(shuō)明:

  • -pkg 指定 package 名稱,調(diào)用的寫法將變成 asset.Asset("config.yaml")
  • -o 指定生成的 Go 源代碼存放的位置

生成的 asset.go 代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Code generated by go-bindata.
// sources:
// scripts/create.sh
// scripts/sub/delete.sh
// config.yaml
// DO NOT EDIT!
 
package asset
 
func bindataRead(data []byte, name string) ([]byte, error) {
    ...
}
 
type asset struct {
 bytes []byte
 info  os.FileInfo
}
 
type bindataFileInfo struct {
 name    string
 size    int64
 mode    os.FileMode
 modTime time.Time
}
 
func (fi bindataFileInfo) Name() string {
 return fi.name
}
func (fi bindataFileInfo) Size() int64 {
 return fi.size
}
func (fi bindataFileInfo) Mode() os.FileMode {
 return fi.mode
}
func (fi bindataFileInfo) ModTime() time.Time {
 return fi.modTime
}
func (fi bindataFileInfo) IsDir() bool {
 return false
}
func (fi bindataFileInfo) Sys() interface{} {
 return nil
}
 
...

調(diào)用

使用 Asset 方法進(jìn)行加載打包好的配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const preloadConfigFile = "config.yaml"
 
type Config struct {
    ...
}
 
func PreloadConfig() (*Config, error) {
    b, err := asset.Asset(preloadConfigFile)
    if err != nil {
        return nil, fmt.Errorf("failed to read config: %v", err)
    }
    var config *Config
    err = yaml.Unmarshal(b, &config)
    return config, err
}

總結(jié)

使用 go-bindata 將文件轉(zhuǎn)換成 Go 的源代碼,然后編譯成二進(jìn)制文件,最終只需要將二進(jìn)制文件交給使用者,通過(guò)這種方式可以減少工具的使用者對(duì)一些敏感信息的直接接觸,保障資源的安全性。
其實(shí),真正要做到對(duì)資源訪問(wèn)的完全把控,可以將 CLI 工具再次進(jìn)行封裝成 Jenkins job 類似的可視化操作界面,既方便使用者使用,又可以限制使用者對(duì)工具的使用范圍,包括傳遞給 CLI 工具的參數(shù)。

到此這篇關(guān)于Golang打包配置文件的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Golang打包配置文件內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/6943973550185250847

延伸 · 閱讀

精彩推薦
  • GolangGolang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語(yǔ)言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語(yǔ)言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggolang 通過(guò)ssh代理連接mysql的操作

    golang 通過(guò)ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過(guò)ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    a165861639710342021-03-08
  • Golanggo語(yǔ)言制作端口掃描器

    go語(yǔ)言制作端口掃描器

    本文給大家分享的是使用go語(yǔ)言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說(shuō)起,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看...

    Go語(yǔ)言中文網(wǎng)11352020-05-21
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    SmallQinYan12302021-02-02
主站蜘蛛池模板: 久久精品片 | 99欧美视频| 久久福利电影网 | 欧美三级日本三级少妇99 | 欧美日韩亚洲国产精品 | 成人福利免费在线观看 | 91成人久久| 国产一区二区精品免费 | 韩国三级日本三级香港三级黄 | 午夜精品福利影院 | 国产一级性生活视频 | 免费在线性爱视频 | 免费一区区三区四区 | 一区二区三区在线播放视频 | 黄色高清视频网站 | 色戒在线版 | 最新一级毛片 | 国产999视频在线观看 | 午夜久久久精品一区二区三区 | 在线播放91 | 免费h片 | 一级做a爰片性色毛片2021 | 成人在线观看免费爱爱 | 欧美视频网 | 日韩精品久久久久久久电影99爱 | 毛片在线免费观看视频 | 天天鲁在线视频免费观看 | 毛片福利 | 日本娇小videos高潮 | 成人福利视频在线观看 | 黄网站免费入口 | 国产欧美在线观看不卡一 | 成人精品视频网站 | 91精品福利视频 | 日产精品久久久一区二区福利 | 九九热在线视频观看这里只有精品 | 免费a级毛片大学生免费观看 | 久久亚洲精品国产一区 | 偿还电影免费看 | 日韩一级片一区二区三区 | 线观看免费完整aaa 一二区成人影院电影网 |