当前位置: 首页 > news >正文

html5网站建设企业南昌网站建设索王道下拉

html5网站建设企业,南昌网站建设索王道下拉,深圳知名企业,上海到北京高铁价格查询文章目录 go:generateViper 读写配置文件ZAP 保存日志定时任务创建apimodel步骤 1. 创建service步骤 2. 创建api步骤 3. 创建router 初始化总路由启动go-swagger路由配置swag init test将嵌套结构定义为指针或对象利弊结构体嵌套学习资源 go:generate //go:generate go env -w … 文章目录 go:generateViper 读写配置文件ZAP 保存日志定时任务创建apimodel步骤 1. 创建service步骤 2. 创建api步骤 3. 创建router 初始化总路由启动go-swagger路由配置swag init test将嵌套结构定义为指针或对象利弊结构体嵌套学习资源 go:generate //go:generate go env -w GO111MODULEon //go:generate go env -w GOPROXYhttps://goproxy.cn,direct //go:generate go mod tidy //go:generate go mod download Viper 读写配置文件 v : viper.New()v.SetConfigFile(config.yaml)v.SetConfigType(yaml)err : v.ReadInConfig()if err ! nil {panic(fmt.Errorf(Fatal error config file: %s \n, err))}if err v.Unmarshal(global.GVA_CONFIG); err ! nil {fmt.Println(err)}cs : utils.StructToMap(global.GVA_CONFIG)for k, v2 : range cs {v.Set(k, v2)}v.WriteConfig()ZAP 保存日志 global.GVA_LOG.Error(“获取失败!”, zap.Error(errors.New(“”))) global.GVA_LOG.Info(server run success on , zap.String(“address”, address)) 定时任务 tm : timer.NewTimerTask()_, err : tm.AddTaskByFunc(func, every 1s, mockFunc)if err nil {tm.StartTask(func)println(StartTaskfunc)}创建api model api 需要调用的api router 路由 service 业务代码 model type Userinfo struct {Name string uri:name form:name json:namePwd string uri:pwd form:pwd json:pwd } type UserinfoResponse struct {Userinfo example.Userinfo json:userinfoToken string json:token } 步骤 1. 创建service example/exa_api.go type ExaApiService struct { }var ExaApiServiceApp new(ExaApiService)func (exaApi *ExaApiService) Login(u example.Userinfo) string {return fmt.Sprintf(Login2name%s password%s, u.Name, u.Pwd) }func (exaApi *ExaApiService) GetUserInfo(u example.Userinfo) string {return fmt.Sprintf(GetUserInfo2name%s password%s, u.Name, u.Pwd) }example/enter.go type ServiceGroup struct {ExaApiService } enter.go type ServiceGroup struct {ExaServiceGroup example.ServiceGroup }var ServiceGroupApp new(ServiceGroup)步骤 2. 创建api example/exa_api.go package exampleimport (github.com/gin-gonic/gingithub.com/githubuityu/study_gin_admin/model/common/responsegithub.com/githubuityu/study_gin_admin/model/example )type ExaApi struct { }// Login /* // http://127.0.0.1:8888/exaApi/login // application/x-www-form-urlencoded或者form-data func (e *ExaApi) Login(c *gin.Context) {var userinfo example.Userinfoerr : c.ShouldBind(userinfo)if err ! nil {response.FailWithMessage(err.Error(), c)return}response.OkWithMessage(exaApi.Login(userinfo), c) }// http://127.0.0.1:8888/exaApi/getUserInfo?namezhangsanpwd6666 func (e *ExaApi) GetUserInfo(c *gin.Context) {var userinfo example.Userinfoerr : c.ShouldBind(userinfo)if err ! nil {response.FailWithMessage(err.Error(), c)return}response.OkWithMessage(exaApi.GetUserInfo(userinfo), c) }// http://127.0.0.1:8888/exaApi/login // // raw { // name:zhangsan, // pwd:23333 // } func (e *ExaApi) LoginJson(c *gin.Context) {var userinfo example.Userinfoerr : c.ShouldBindJSON(userinfo)if err ! nil {response.FailWithMessage(err.Error(), c)return}response.OkWithMessage(exaApi.Login(userinfo), c) }// http://127.0.0.1:8888/exaApi/getUserInfoPath/zhangsan/555 func (e *ExaApi) GetUserInfoPath(c *gin.Context) {var userinfo example.Userinfoerr : c.ShouldBindUri(userinfo)if err ! nil {response.FailWithMessage(err.Error(), c)return}response.OkWithMessage(exaApi.GetUserInfo(userinfo), c) } example/enter.go type ApiGroup struct {ExaApi }var (exaApi service.ServiceGroupApp.ExaServiceGroup.ExaApiService ) enter.go type ApiGroup struct {ExaApiGroup example.ApiGroup}var ApiGroupApp new(ApiGroup)步骤 3. 创建router example/exa_api.go type ExaAPi struct { }func (e *ExaAPi) InitExaAPiRouter(Router *gin.RouterGroup) {exaApiRouter : Router.Group(exaApi).Use(middleware.ExaMiddleware())exaApiRouterWithoutRecord : Router.Group(exaApi)exaApi : v1.ApiGroupApp.ExaApiGroup{exaApiRouter.POST(login, exaApi.Login) exaApiRouter.POST(loginJson, exaApi.LoginJson) }{exaApiRouterWithoutRecord.GET(getUserInfo, exaApi.GetUserInfo) exaApiRouterWithoutRecord.GET(getUserInfoPath/:name/:pwd, exaApi.GetUserInfoPath) } }example/enter.go type RouterGroup struct {ExaAPi } enter.go type RouterGroup struct {ExaApi example.RouterGroup }var RouterGroupApp new(RouterGroup)初始化总路由 func Routers() *gin.Engine {// 设置为发布模式if global.GVA_CONFIG.System.Env public {gin.SetMode(gin.ReleaseMode) //DebugMode ReleaseMode TestMode}Router : gin.New()exaApiRouter : router.RouterGroupApp.ExaApi//PrivateGroup : Router.Group(global.GVA_CONFIG.System.RouterPrefix)PublicGroup : Router.Group(global.GVA_CONFIG.System.RouterPrefix){// 健康监测PublicGroup.GET(/health, func(c *gin.Context) {c.JSON(http.StatusOK, ok)})}exaApiRouter.InitExaAPiRouter(PublicGroup)global.GVA_LOG.Info(router register success)return Router }启动 package mainimport (fmtgithub.com/githubuityu/study_gin_admin/coregithub.com/githubuityu/study_gin_admin/globalgithub.com/githubuityu/study_gin_admin/initializego.uber.org/zaptime )//go:generate go env -w GO111MODULEon //go:generate go env -w GOPROXYhttps://goproxy.cn,direct //go:generate go mod tidy //go:generate go mod download func main() {global.GVA_VP core.Viper() // 初始化Viperinitialize.OtherInit()global.GVA_LOG core.Zap() // 初始化zap日志库zap.ReplaceGlobals(global.GVA_LOG)global.GVA_DB initialize.Gorm() // gorm连接数据库initialize.Timer()core.RunWindowsServer()}go-swagger 参数类型 query、path、body、headerformData 参数参数类型 string integer number boolean struct // Login // Summary 用户登录 // Tags ExaApi // Produce application/json // Param name formData string false 名字 // Param pwd formData string false 密码 // Success 200 {object} response.Response{dataexaApiRes.UserinfoResponse,msgstring} 返回包括用户信息,token,过期时间 // Router /exaApi/login [post] func (e *ExaApi) Login(c *gin.Context) {var userinfo example.Userinfoerr : c.ShouldBind(userinfo)if err ! nil {response.FailWithMessage(err.Error(), c)return}response.OkWithDetailed(exaApiRes.UserinfoResponse{Userinfo: userinfo,Token: userinfo.Pwd,}, 登录成功, c) }路由配置 docs.SwaggerInfo.BasePath global.GVA_CONFIG.System.RouterPrefix Router.GET(global.GVA_CONFIG.System.RouterPrefix/swagger/*any, ginSwagger.WrapHandler(swaggerFiles.Handler))swag init test 创建一个a.go创建一个测试文件a_test.go创建一个方法方法名以Test开始参数为(t *testing.T) //a.go package utilstype TestA struct {TestB }type TestB struct { }func (tb *TestB) GetInfo() string {return 返回数据 }var ItyuTestA new(TestA)package utils//a_test.go import testingfunc TestAaaa(t *testing.T) {print(ItyuTestA.TestB.GetInfo()) }将嵌套结构定义为指针或对象利弊 将嵌套结构定义为指针: 内存效率:使用指针可以提高内存效率特别是当嵌套结构体很大时。指针只存储结构体的内存地址而不是复制整个结构体的数据。 可变性:如果你需要修改父结构中的嵌套结构的数据使用指针允许你直接修改被引用的对象。 避免nil值:如果嵌套结构可能有nil值使用指针可以通过将指针设置为nil来表示值的缺失。 将嵌套结构定义为对象: 简单性:直接使用对象可以简化代码因为不需要处理指针解引用。它可以使代码更易于阅读和理解。 避免与指针相关的问题:操作指针需要小心处理以避免空指针异常和内存泄漏。使用对象可以帮助避免此类问题。 不可变性:如果嵌套结构的数据在父结构中应该被视为不可变的那么使用对象可以强制这种不可变性并防止无意的修改。 最终对嵌套结构使用指针还是对象的选择取决于性能、可变性要求、内存使用和代码简单性等因素。考虑应用程序的具体需求并根据这些需求做出决定。 结构体嵌套 结构体嵌套在编程中有多种作用和用途以下是一些常见的用途 组合数据结构体嵌套允许将多个相关的数据字段组合在一起形成更复杂的数据结构。通过嵌套其他结构体可以在一个结构体中包含其他结构体的数据从而形成逻辑上的组合关系。 嵌套层次通过结构体嵌套可以创建多层次的数据结构形成树状或层次化的关系。这样可以更好地组织和管理数据使其更具可读性和可维护性。 代码复用结构体嵌套可以实现代码的复用。通过将一个结构体嵌套到另一个结构体中可以共享嵌套结构体的字段和方法避免重复定义和编写相同的代码。 组合功能通过将一个结构体嵌套到另一个结构体中可以将嵌套结构体的方法和行为组合到外部结构体中形成更丰富的功能。外部结构体可以调用嵌套结构体的方法实现更复杂的行为。 数据模型结构体嵌套可以用于定义和表示复杂的数据模型。通过将多个相关的数据结构嵌套在一起可以更好地表示现实世界的实体和关系。 总的来说结构体嵌套提供了一种组合和组织数据的机制可以使代码更具可读性、可维护性和复用性。它是构建复杂数据结构和实现代码组合的重要工具之一。 学习资源 gin-vue-admin
http://www.w-s-a.com/news/783024/

相关文章:

  • 网站策划怎么做内容旅游型网站建设
  • 东莞百度网站推广ppt模板免费下载的网站
  • 网站建设项目管理基本要求网站空间到期影响
  • 做奖杯的企业网站谁有推荐的网址
  • wordpress能做企业站吗wordpress收发邮件
  • 电子产品网站建设策划方案腾讯企业邮箱注册申请免费
  • 哪些网站可以免费做代码自己电脑做网站服务器广域网访问
  • 高端网站设计青海省教育厅门户网站学籍查询
  • 长春网站优化公司网站制作400哪家好
  • 县级门户网站建设的报告开发游戏的软件有哪些
  • 做电子商务的网站wordpress带会员中心
  • 网站域名不变网站可以从做吗网站建设步骤 文档
  • 网站建设中 gif互联网新项目在哪里找
  • 做外包网站猎头公司英文
  • 房屋结构自建设计 网站海淀教育互动平台
  • 网络营销比赛 营销型网站策划热门搜索关键词
  • 网站建设图片代码网络设计师工资
  • 福建网站开发适合交换友情链接的是
  • 企业门户网站建站内乡微网站开发
  • 在线做logo印章网站一般到哪个网站找数据库
  • 哪些网站做免费送东西的广告6郑州人流医院哪家好
  • 高端做网站哪家好sem技术培训
  • 网站做等保是按照什么定级别的做网站的资源哪里找
  • 免费建站网页无需登陆潍坊高端模板建站
  • 北京php网站建设软通动力外包值得去吗
  • 优酷 做视频网站还能成功吗光谷做网站推广哪家好
  • 培训学校网站建设方案网站开发方案设计
  • 网站开发分支结构外贸网站做推广
  • 海南省城乡建设厅网站首页济南网站建设百家号
  • wordpress 图片命名吗北京seo优化哪家公司好