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)前時間戳
其中 「pf_wt」, 「pf_s」 使用了 網(wǎng)絡(luò)的接口.其他的都是沒有使用網(wǎng)絡(luò)的接口.在更新迭代的過程中,遇到嘞些問題,這里記錄一下.
顯示與復(fù)制的問題
1. 復(fù)制問題
在開發(fā) 「pf_b64」,「pf_t」,「pf_md5」 的時候, 顯示都沒啥問題, 但是在使用的過程中發(fā)現(xiàn), 由于使用了 「termui」 終端 UI 庫導(dǎo)致復(fù)制的時候, 復(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」 的時候, 直接復(fù)制到 剪貼板。這樣就方便多了。
2. 顯示問題
「pf_b64」 終端顯示的時候,由于前期測試的是比較短的內(nèi)容, 后來加入比較長的內(nèi)容的時候 導(dǎo)致顯示的內(nè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)行了動態(tài)計算, 然后進(jìn)行了動態(tài)的顯示,出來的效果就是可以換行顯示了,效果如下:
注意: 這里按 c 復(fù)制
打包問題
在 「go build」 以后丟到 linux 系統(tǒng)上 發(fā)現(xiàn) 無法運行, 因為 在 開發(fā) 「pf_m」 命令的時候使用了,第三方的庫 「github.com/zheng-ji/gophone」, 這個庫中有一個 「.dat」的靜態(tài)文件, 在 「go build」 以后沒有打包進(jìn)程序中去, 于是 開啟 google 大法, 發(fā)現(xiàn)還是沒有啥好的解決辦法.
最后, 翻了翻 「github.com/zheng-ji/gophone」 這個包中的源碼, 發(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)上 運行正常.
「上面這種 復(fù)制代碼的解決辦法,估計是個大坑,等后續(xù)看到解決辦法,再來更新記錄」
Windows 顯示問題
由于解決了運行的問題, 以為萬事大吉了 但是在 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定義操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04go語言使用Chromedp實現(xiàn)二維碼登陸教程示例源碼
這篇文章主要為大家介紹了go語言使用Chromedp實現(xiàn)二維碼登陸示例源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04