如何在restful中设计bool查询

如何在restful中设计bool查询,rest,go,boolean,Rest,Go,Boolean,我有这样一个用户模型: 类型用户结构{ 名称字符串 启用布尔//这是一个布尔字段 在线布尔//这是布尔字段 //其他领域。。。 } 创建用户时: POST /api/v1/users { "name": "hello", "enabled": true // option, default is true } 创建请求模型是: 输入CreateUserReq结构{ 名称字符串 已启用布尔//但golang默认值为false } 列出用户时: GET /api/v1/us

我有这样一个用户模型:

类型用户结构{
名称字符串
启用布尔//这是一个布尔字段
在线布尔//这是布尔字段
//其他领域。。。
}
创建用户时:

POST /api/v1/users 
{
    "name": "hello",
    "enabled": true  // option, default is true
}
创建请求模型是:

输入CreateUserReq结构{
名称字符串
已启用布尔//但golang默认值为false
}
列出用户时:

GET /api/v1/users               // list all users, but golang default value is false
GET /api/v1/users?enabled=true  // list enabled users
GET /api/v1/users?enabled=false // list disabled users
列表请求模型为:

类型ListUserReq结构{
状态布尔//但golang默认值为false
}

解决这个问题的常用方法是什么?

没有初始值的变量被赋予零值。 对于布尔类型,零值为
false

您可以使用
bool
指针,其零值为
nil
。然后您可以检查
是否已启用
是否已设置。如果
已启用
nil
,则签入处理程序,然后将默认情况设置为
true

type CreateUserReq struct {
    Name    string
    Enabled *bool  
}

布尔值的默认值在几乎所有语言中都是false,因此这对于您的许多客户机来说可能是个问题。考虑将字段重命名为“禁用”。如果您不想这样做,请使用Eklavya回答中解释的指针。@Peter如果重命名为“disabled”则仍然使用“listAll”unnatural@Peter如果我将字段类型更改为字符串,并定义“const UserEnabled”和“const UserDisabled”,这是通常的做法吗?不是。将字符串用于固有的布尔值是一个糟糕的主意。这会给您和所有客户使用API带来很大不便。列表端点不是问题,因为在任何情况下都必须进行字符串比较(所有查询值都是字符串)。如果我将字段类型更改为字符串,并定义“const UserEnabled”和“const UserDisabled”,这是通常的做法吗?如果要区别对待“”(空字符串),使用布尔值作为字符串并使用字符串指针(如
*string
)。我不认为
const
是请求主体的理想选择