《Golang代码组织最佳方案》
案例一:不建议的偷懒结构
$gopath/src/github.com/ryanemax/device/pkg_phone/phone.go
$gopath/src/github.com/ryanemax/device/main.go
import "./pkg_phone"
案例二:Docker中也不建议的偷懒结构
gonet2示例:github.com/gonet2/game
Dockerfile # Docker环境文件
src/proto # 包proto
src/registry # 包registry
src/game/service.go # game主程
import(
"regitry"
"proto"
)
虽然docker中环境纯净,但多个$GOPATH中如果都存在src/registry名称的库,则会产生冲突。
最佳结构方式
# 案例一中
import "github.com/ryanemax/device/pkg_phone"
# 案例二中
import (
"github.com/gonet2/src/registry"
"github.com/gonet2/src/proto"
)
《Golang实用的第三方库》
https://github.com/avelino/awesome-go
命令行应用开发库
Cobra,案例:Hugo
https://github.com/spf13/cobra
文本界面应用开发库
color 简单的命令行颜色输出
https://github.com/fatih/color
Termui 完整的命令行应用界面(基于https://github.com/nsf/termbox-go)
https://github.com/gizak/termui
实用的原生库
encoding/hex
常用于解析网络通信协议中的BCD码流
pdata := byte[]{0x12,0x34,0x56,0x78}
data_imei := hex.EncodeToString(pdata[0:3])
fmt.Println(data_imei)
## 输出结果为12345678
strconv
常用与各数制与字符之间的转换
## 常规方式:转换int类型12,到二进制字符串
fint := strconv.FormatInt(12, 2)
fmt.Println("FormatBinary 12:", fint)
## 输出结果为1100
## 快捷方式:转换int类型12,到二进制字符串
bs := fmt.Sprintf("%b",12)
## bs输出结果为1100
## 快捷方式:转换任意数制到int类型
fmt.Printf("电压等级:%d\n", content[1])
plev, err := strconv.Atoi(fmt.Sprintf("%d", content[1]))
if err != nil {
Warning(err.Error())
}
device.StatusPowerLev = plev
fmt.Printf("GSM信号强度等级:%d\n", content[2])
gsmlev, err := strconv.Atoi(fmt.Sprintf("%d", content[2]))
if err != nil {
Warning(err.Error())
}
device.StatusGsmLev = gsmlev
## 快捷方式:Byte时间数据,转时间戳
## gpstime := []byte{0x0f, 0x0c, 0x0e, 0x11, 0x01, 0x0c}
func ParseTime(gpstime []byte) time.Time {
//解析六个字节的时间数据为标准的时间戳
var ts string
for _, v := range gpstime {
//将每个字节格式化输出成十进制字符串
ts += fmt.Sprintf("%2d", v)
}
//替换格式化输出导致的整数高位空格
ts = strings.Replace(ts, " ", "0", -1)
//时间戳格式化
const TimeFormat = "2006-01-02 15:04:05"
t, err := time.Parse(TimeFormat, "20"+ts[0:2]+"-"+ts[2:4]+"-"+ts[4:6]+" "+ts[6:8]+":"+ts[8:10]+":"+ts[10:12])
if err != nil {
//Error(err.Error())
}
//Warning(err.Error())
//Info("定位时间:", t)
return t
}
作者:ryanemax
微信关注:ryanemax (刘雨飏)
本文出处:https://romantic-hoover-f991f1.netlify.com/cookbook/backend/golangincase/
授权协议:
CC BY-SA 4.0