go包的设计

目前go的包设计是一个文件夹就是一个包,包内部若要进一步划分,则必须建立子文件夹。
这种设计有点小缺陷:

  1. 搞的子文件夹多
  2. 如果不搞子文件夹则搞前缀区分,前缀的噪音太大,代码不美观

我有个提议,你们觉得这种设计美观不。
下面是一个test数据库的orderInfo表的entity文件,包含了表的结构和表字段的枚举示例。

package TestDbEntity.OrderInfo

type Table struct {
    OrderNo            int64   `json:"orderNo"            orm:"order_no"             ` // 订单号
    UserId             int     `json:"userId"             orm:"user_id"              ` // 用户UID
    ProductId          int     `json:"productId"          orm:"product_id"           ` // 产品ID
    OrderStatus        int     `json:"orderStatus"        orm:"order_status"         ` // 订单状态 [未付款:0,已付款:1,已失效:2,已退款:3,退款申请:4,退款中:5,已取消:6]
}

type OrderStatus int

const OrderStatusPayNo OrderStatus = 0
const OrderStatusPayYes OrderStatus = 1
const OrderStatusInvalid OrderStatus = 2
const OrderStatusRefundYes OrderStatus = 3
const OrderStatusRefundApply OrderStatus = 4
const OrderStatusRefundGo OrderStatus = 5
const OrderStatusCancel OrderStatus = 6

func (c OrderStatus) String() string {
    switch c {
        case OrderStatusPayNo:
        return "未付款"
        case OrderStatusPayYes:
        return "已付款"
        case OrderStatusInvalid:
        return "已失效"
        case OrderStatusRefundYes:
        return "已退款"
        case OrderStatusRefundApply:
        return "退款申请"
        case OrderStatusRefundGo:
        return "退款中"
        case OrderStatusCancel:
        return "已取消"
        default:
        return "未知类型"
    }
}

外部代码调用这个包的示例:

//初始化表
table := TestDbEntity.OrderInfo.Table {
    OrderNo: 6636,
}
//打印枚举值
fmt.Println(TestDbEntity.OrderInfo.OrderStatusPayNo.String())
梦想星辰大海
讨论数量: 4

这是最好的设计!!!

10小时前 评论
梦想星辰大海 (楼主) 10小时前
taadis

这种设计刚刚好,不觉得很清晰直观嘛,目录即包,路径即命名空间。

9小时前 评论
文件夹
TestDbEntity

package OrderInfo

使用:

table := TestDbEntity.OrderInfo.Table {
    OrderNo: 6636,
}

这样就差不多的,只是很少有包这样命名包名

6小时前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!