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

网站怎么做免费seo搜索引擎乐陵市seo关键词优化

网站怎么做免费seo搜索引擎,乐陵市seo关键词优化,怎么做扒代码网站,朝阳市做网站的公司文章目录 go:generateViper 读写配置文件ZAP 保存日志定时任务创建apimodel步骤 1. 创建service步骤 2. 创建api步骤 3. 创建router 初始化总路由启动go-swagger路由配置swag init test将嵌套结构定义为指针或对象利弊结构体嵌套学习资源 go:generate //go:generate go env -w …

文章目录

        • go:generate
        • Viper 读写配置文件
        • ZAP 保存日志
        • 定时任务
        • 创建api
          • model
          • 步骤 1. 创建service
          • 步骤 2. 创建api
          • 步骤 3. 创建router
        • 初始化总路由
        • 启动
        • go-swagger
          • 路由配置
          • swag init
        • test
        • 将嵌套结构定义为指针或对象利弊
        • 结构体嵌套
        • 学习资源

go:generate

//go:generate go env -w GO111MODULE=on
//go:generate go env -w GOPROXY=https://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("StartTask=func")}
创建api

model
api 需要调用的api
router 路由
service 业务代码

model

type Userinfo struct {Name string `uri:"name" form:"name" json:"name"`Pwd  string `uri:"pwd" form:"pwd" json:"pwd"`
}
type UserinfoResponse struct {Userinfo example.Userinfo `json:"userinfo"`Token    string           `json:"token"`
}
步骤 1. 创建service
  1. example/exa_api.go
type ExaApiService struct {
}var ExaApiServiceApp = new(ExaApiService)func (exaApi *ExaApiService) Login(u example.Userinfo) string {return fmt.Sprintf("Login2=name=%s password=%s", u.Name, u.Pwd)
}func (exaApi *ExaApiService) GetUserInfo(u example.Userinfo) string {return fmt.Sprintf("GetUserInfo2=name=%s password=%s", u.Name, u.Pwd)
}
  1. example/enter.go

type ServiceGroup struct {ExaApiService
}
  1. enter.go
 type ServiceGroup struct {ExaServiceGroup example.ServiceGroup
}var ServiceGroupApp = new(ServiceGroup)
步骤 2. 创建api
  1. example/exa_api.go
package exampleimport ("github.com/gin-gonic/gin""github.com/githubuityu/study_gin_admin/model/common/response""github.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?name=zhangsan&pwd=6666
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)
}
  1. example/enter.go

type ApiGroup struct {ExaApi
}var (exaApi = service.ServiceGroupApp.ExaServiceGroup.ExaApiService
)
  1. enter.go
 type ApiGroup struct {ExaApiGroup example.ApiGroup}var ApiGroupApp = new(ApiGroup)
步骤 3. 创建router
  1. 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) }
}
  1. example/enter.go

type RouterGroup struct {ExaAPi
}
  1. 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 ("fmt""github.com/githubuityu/study_gin_admin/core""github.com/githubuityu/study_gin_admin/global""github.com/githubuityu/study_gin_admin/initialize""go.uber.org/zap""time"
)//go:generate go env -w GO111MODULE=on
//go:generate go env -w GOPROXY=https://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、header,formData
参数参数类型 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{data=exaApiRes.UserinfoResponse,msg=string}  "返回包括用户信息,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
  1. 创建一个a.go
  2. 创建一个测试文件a_test.go
  3. 创建一个方法方法名以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 "testing"func TestAaaa(t *testing.T) {print(ItyuTestA.TestB.GetInfo())
}
将嵌套结构定义为指针或对象利弊
  1. 将嵌套结构定义为指针:
    内存效率:使用指针可以提高内存效率,特别是当嵌套结构体很大时。指针只存储结构体的内存地址,而不是复制整个结构体的数据。
    可变性:如果你需要修改父结构中的嵌套结构的数据,使用指针允许你直接修改被引用的对象。
    避免nil值:如果嵌套结构可能有nil值,使用指针可以通过将指针设置为nil来表示值的缺失。

  2. 将嵌套结构定义为对象:
    简单性:直接使用对象可以简化代码,因为不需要处理指针解引用。它可以使代码更易于阅读和理解。
    避免与指针相关的问题:操作指针需要小心处理,以避免空指针异常和内存泄漏。使用对象可以帮助避免此类问题。
    不可变性:如果嵌套结构的数据在父结构中应该被视为不可变的,那么使用对象可以强制这种不可变性并防止无意的修改。

  3. 最终,对嵌套结构使用指针还是对象的选择取决于性能、可变性要求、内存使用和代码简单性等因素。考虑应用程序的具体需求,并根据这些需求做出决定。

结构体嵌套

结构体嵌套在编程中有多种作用和用途,以下是一些常见的用途:

  1. 组合数据:结构体嵌套允许将多个相关的数据字段组合在一起,形成更复杂的数据结构。通过嵌套其他结构体,可以在一个结构体中包含其他结构体的数据,从而形成逻辑上的组合关系。

  2. 嵌套层次:通过结构体嵌套,可以创建多层次的数据结构,形成树状或层次化的关系。这样可以更好地组织和管理数据,使其更具可读性和可维护性。

  3. 代码复用:结构体嵌套可以实现代码的复用。通过将一个结构体嵌套到另一个结构体中,可以共享嵌套结构体的字段和方法,避免重复定义和编写相同的代码。

  4. 组合功能:通过将一个结构体嵌套到另一个结构体中,可以将嵌套结构体的方法和行为组合到外部结构体中,形成更丰富的功能。外部结构体可以调用嵌套结构体的方法,实现更复杂的行为。

  5. 数据模型:结构体嵌套可以用于定义和表示复杂的数据模型。通过将多个相关的数据结构嵌套在一起,可以更好地表示现实世界的实体和关系。

  6. 总的来说,结构体嵌套提供了一种组合和组织数据的机制,可以使代码更具可读性、可维护性和复用性。它是构建复杂数据结构和实现代码组合的重要工具之一。

学习资源

gin-vue-admin

http://www.mmbaike.com/news/77860.html

相关文章:

  • 河源正规网站建设价格网站广告投放收费标准
  • 工业设计公司怎么收费seo怎么提升关键词的排名
  • 专门做照片的网站网络推广是什么专业
  • 做网站与全网营销搜索推广排名优化今日新闻简讯30条
  • 北京官网seo推广成都seo达人
  • 微信分享接口网站开发百度快速收录账号购买
  • 西宁哪家网络公司做网站实时新闻最新消息
  • 免费开网店的app佛山seo技术
  • javaweb做网站过程如何做营销推广
  • 哪个视频网站做视频最赚钱的厦门网站建设公司哪家好
  • 常州网站推广优化百度网站登录入口
  • 装修公司做网站有用吗免费推广渠道有哪些
  • 百度做网站怎么联系电商软文范例100字
  • 制作网站加背景怎么做流程三只松鼠搜索引擎营销案例
  • org后缀做网站行衡阳网站建设公司
  • 元器件网站搭建怎么优化网络
  • 我们做网站 出教材 办育心经免费企业建站
  • 电子商务网站建设合同书厦门百度seo
  • 中国十大旅游网站网络营销的策略包括
  • 综合型网站建设环球贸易网
  • 怎么弄网站网站建设步骤流程详细介绍
  • 免费java源码分享网站源码seo教育
  • 华建建设集团网站搜索引擎seo优化平台
  • 河南手机网站制作公司免费网站注册免费创建网站
  • 婚恋网站应聘做销售婚恋网站排名前三
  • 怎样做废旧网站seo高端培训
  • 免费企业查询网站厦门seo管理
  • 网络营销推广方法的综合运用广州关键词优化外包
  • asp.ne做网站it学校培训学校哪个好
  • 广州网站建设多少钱台州seo快速排名