GO語言開發(fā)終端命令行小工具改進(jìn)更新
引言
前面有一篇文章記錄了使用 Go 的 cobra/cobra 庫來開發(fā) 終端的小工具
在前面的基礎(chǔ)上又更新了一些小的工具.內(nèi)容如下:
- pf_tools pf_wt 查詢天氣 - pf_tools pf_m 手機(jī)歸屬地查詢 - pf_tools pf_md5 md5 小工具 - pf_tools pf_b64 base64 小工具 - pf_tools pf_s 查詢網(wǎng)絡(luò)詞匯 - pf_tools pf_t 獲取當(dāng)前時(shí)間戳
其中 「pf_wt」, 「pf_s」 使用了 網(wǎng)絡(luò)的接口.其他的都是沒有使用網(wǎng)絡(luò)的接口.在更新迭代的過程中,遇到嘞些問題,這里記錄一下.
顯示與復(fù)制的問題
1. 復(fù)制問題
在開發(fā) 「pf_b64」,「pf_t」,「pf_md5」 的時(shí)候, 顯示都沒啥問題, 但是在使用的過程中發(fā)現(xiàn), 由于使用了 「termui」 終端 UI 庫導(dǎo)致復(fù)制的時(shí)候, 復(fù)制的內(nèi)容是亂的。于是做了如下修改:
uiEvents := ui.PollEvents() for { e := <-uiEvents switch e.ID { case "q": return case "c": _ = clipboard.WriteAll(enStr) return } }
使用了「github.com/atotto/clipboard」庫, 增加了 按鍵 「c」 的時(shí)候, 直接復(fù)制到 剪貼板。這樣就方便多了。
2. 顯示問題
「pf_b64」 終端顯示的時(shí)候,由于前期測試的是比較短的內(nèi)容, 后來加入比較長的內(nèi)容的時(shí)候 導(dǎo)致顯示的內(nèi)容被截?cái)? 于是做了如下修改:
func splitStringByLength(s string, length int) []string { var result []string for i := 0; i < len(s); i += length { if i+length > len(s) { result = append(result, s[i:]) } else { result = append(result, s[i:i+length]) } } return result } sEncList := splitStringByLength(sprintf, 100) // fmt.Println(strings.Join(sEncList, "\n")) p := widgets.NewParagraph() p.Title = "加密結(jié)果" p.Text = strings.Join(sEncList, "\n") // p.Text = sprintf p.TextStyle.Fg = ui.ColorGreen p.TextStyle.Modifier = ui.ModifierBold p.BorderStyle.Fg = ui.ColorGreen p.WrapText = true p.SetRect(0, 0, 105, len(sEncList)+2)
對 結(jié)果 的長度進(jìn)行了動(dòng)態(tài)計(jì)算, 然后進(jìn)行了動(dòng)態(tài)的顯示,出來的效果就是可以換行顯示了,效果如下:
注意: 這里按 c 復(fù)制
打包問題
在 「go build」 以后丟到 linux 系統(tǒng)上 發(fā)現(xiàn) 無法運(yùn)行, 因?yàn)?在 開發(fā) 「pf_m」 命令的時(shí)候使用了,第三方的庫 「github.com/zheng-ji/gophone」, 這個(gè)庫中有一個(gè) 「.dat」的靜態(tài)文件, 在 「go build」 以后沒有打包進(jìn)程序中去, 于是 開啟 google 大法, 發(fā)現(xiàn)還是沒有啥好的解決辦法.
最后, 翻了翻 「github.com/zheng-ji/gophone」 這個(gè)包中的源碼, 發(fā)現(xiàn)代碼不多, 直接復(fù)制過來, 然后吧 「.bat」 的數(shù)據(jù)庫文件也復(fù)制過來, 然后去「go build」 發(fā)現(xiàn)還是沒有打包進(jìn)去, 于是 繼續(xù) google 大法, 最后修改了一下 包含文件的代碼:
// 修改前 func init() { _, fulleFilename, _, _ := runtime.Caller(0) var err error content, err = ioutil.ReadFile(path.Join(path.Dir(fulleFilename), PHONE_DAT)) if err != nil { panic(err) } } // 修改后 //go:embed phone.dat var fsContent embed.FS func init() { var err error content, err = fsContent.ReadFile(PhoneDat) if err != nil { panic(err) } }
使用了 「embed」 來進(jìn)行導(dǎo)入. 然后順利打包,在 linux 系統(tǒng)上 運(yùn)行正常.
「上面這種 復(fù)制代碼的解決辦法,估計(jì)是個(gè)大坑,等后續(xù)看到解決辦法,再來更新記錄」
Windows 顯示問題
由于解決了運(yùn)行的問題, 以為萬事大吉了 但是在 windows 系統(tǒng)上 發(fā)現(xiàn) 顯示有問題 如下:
搜索發(fā)現(xiàn) 「termui」 在 windows 下不支持中文, 所以只能 放棄 win了
最后
小工具持續(xù)更新,更多關(guān)于GO開發(fā)終端命令行工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang 生成對應(yīng)的數(shù)據(jù)表struct定義操作
這篇文章主要介紹了golang 生成對應(yīng)的數(shù)據(jù)表struct定義操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04Gin+Gorm實(shí)現(xiàn)CRUD的實(shí)戰(zhàn)
本文主要介紹了Gin+Gorm實(shí)現(xiàn)CRUD的實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02goland?導(dǎo)入github包報(bào)紅問題解決
本文主要介紹了Go項(xiàng)目在GoLand中導(dǎo)入依賴標(biāo)紅問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08go語言使用Chromedp實(shí)現(xiàn)二維碼登陸教程示例源碼
這篇文章主要為大家介紹了go語言使用Chromedp實(shí)現(xiàn)二維碼登陸示例源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04GoFrame框架gset交差并補(bǔ)集使用實(shí)例
這篇文章主要為大家介紹了GoFrame框架gset交差并補(bǔ)集使用實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06