golang 组装返回json数据,提供api接口

model里

package model

type Setting struct {
   Key   string `gorm:"primary_key" json:"key"`
   Value string `json:"value"`
}

// @desc 按Key获设置
func (Setting *Setting) GetSettingInfo(Key string) (setting Setting) {
   db.Model(&Setting).Where("`key` = ?", Key).First(&setting)
   return
}

controller里

一.2层数据

1.普通方法:
控制器里

package Controller

import (
   "encoding/json"
   "github.com/Unknwon/com"
   . "github.com/gin-gonic/gin"
   "linkbook.com/LinkBookGo/App/model"
   "linkbook.com/LinkBookGo/lib/httpext"
)

var SettingModel = model.Setting{}


//认证展示页面选卡
type CommonParam struct {
   CashOutMoneyFeerate        int `json:"cash_out_money_feerate"`
}
//获取常用配置参数
/**
* 提现手续费
* 请求方式 [GET]
* 线上请求地址 https://api.ibanana.club/setting/get_setting?key=common_param
* 本地请求地址 http://localhost:8811/setting/get_setting?key=common_param
* token [string] [必填] 写在Header头里
* Author Haima
 */
func GetSetting(context *Context) {
   Key := com.StrTo(context.DefaultQuery("key", "")).String()
   setting_info1 := SettingModel.GetSettingInfo(Key)
   var CommonParamList CommonParam
   json.Unmarshal([]byte(setting_info1.Value),&CommonParamList)
   httpext.SuccessExt(context, CommonParamList)
}

返回数据:

{
    "data": [
        {
            "time": 10,
            "pre_num": 10,
            "gold_coin_num": 100
        },
        {
            "time": 20,
            "pre_num": 20,
            "gold_coin_num": 200
        },
        {
            "time": 30,
            "pre_num": 30,
            "gold_coin_num": 300
        },
        {
            "time": 40,
            "pre_num": 40,
            "gold_coin_num": 400
        },
        {
            "time": 50,
            "pre_num": 50,
            "gold_coin_num": 500
        },
        {
            "time": 70,
            "pre_num": 70,
            "gold_coin_num": 700
        }
    ],
    "errmsg": "ok",
    "errno": 200
}

二.2层数据

func CashoutMoneyList(ctx *Context) {
   setting_info1 := SettingModel.GetSettingInfo("cash_out_money_list")
   //认证展示页面选卡
   type cashoutMoney struct {
      ID           int `json:"id"`
      Money        int `json:"money"`
      GoldCoin     int `json:"gold_coin"`
      SignInDays   int `json:"sign_in_days"`
      InvitePerNum int `json:"invite_per_num"`
   }

   var cashoutMoneyList []cashoutMoney
   json.Unmarshal([]byte(setting_info1.Value),&cashoutMoneyList)

   type cashoutRes struct {
      CashOutMoneyFeerate int `json:"cash_out_money_feerate"`
      List []cashoutMoney `json:"cashout_money_lists"`
   }
   res := cashoutRes{
      CashOutMoneyFeerate:10,
      List:cashoutMoneyList,
   }
   httpext.SuccessExt(ctx, res)
}

返回结果:

{
    "data": {
        "cash_out_money_feerate": 10,
        "cashout_money_lists": [
            {
                "id": 1,
                "money": 1,
                "gold_coin": 100,
                "sign_in_days": 3,
                "invite_per_num": 3
            },
            {
                "id": 2,
                "money": 2,
                "gold_coin": 200,
                "sign_in_days": 6,
                "invite_per_num": 6
            },
            {
                "id": 3,
                "money": 3,
                "gold_coin": 300,
                "sign_in_days": 9,
                "invite_per_num": 9
            },
            {
                "id": 4,
                "money": 4,
                "gold_coin": 400,
                "sign_in_days": 12,
                "invite_per_num": 12
            },
            {
                "id": 5,
                "money": 5,
                "gold_coin": 500,
                "sign_in_days": 15,
                "invite_per_num": 15
            }
        ]
    },
    "errmsg": "ok",
    "errno": 200
}

方法 2:返回kv形式的

controller.go里

func GetCompanyList(ctx *Context) {
   companyName := ctx.Query("company_name")
   page := com.StrTo(ctx.DefaultQuery("page", "1")).MustInt()
   row := com.StrTo(ctx.DefaultQuery("row", "10")).MustInt()
   offset := (page - 1) * row
   cm := model.Company{}
   companyList := cm.GetCompaniesLikeName(companyName, offset, row)
   companyMap := make(map[int]string)
   for _, v := range companyList {
      companyMap[v.ID] = v.CompanyName
   }
   res := make(map[string]interface{})
   res["list"] = companyMap
   httpext.SuccessExt(ctx, res)
}

model.go里

func (c *Company) GetCompaniesLikeName(name string, offset int, row int) (companies []Company) {
   db.Model(c).Where("company_name like ?", "%"+name+"%").Offset(offset).Limit(row).Find(&companies)
   return
}

返回参数:

{
    "data": {
        "9": "北京陶然雅居古典家具有限公司",
        "12": "北京理工至信技术开发有限公司",
        "13": "北京市汇丰通达贸易有限责任公司",
        "14": "北京亿翔工程技术有限公司",
        "20": "北京金裕腾达商贸有限公司",
        "22": "北京同一首歌传媒广告有限公司",
        "34": "北京祥昌华通通信器材有限公司",
        "40": "北京启迅网安科技有限公司上海分公司",
        "44": "北京芝麻视界教育科技有限公司",
        "47": "北京亚环传媒科技有限公司"
    },
    "errmsg": "ok",
    "errno": 200
}
posted @   HaimaBlog  阅读(4090)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示