今日长缨在手,何时缚住苍龙。这篇文章主要讲述#yyds干货盘点#golang快速部署restful项目相关的知识,希望能为你提供帮助。
1.开发环境
golang编译器??下载链接??
安装go开发环境请看官网
??go安装??
2.新建项目
3.项目结构
cmd:主函数启动【#yyds干货盘点#golang快速部署restful项目】main.go
package main
import (
_ "container_cloud/pkg/config"
"container_cloud/pkg/utils/httputil"
"container_cloud/routers"
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"net/http"
"time"
)
func init()
httputil.InitHttpTool()
// mysql
const (
USERNAME = "root"
PASSWORD = "Admin123"
NETWORK= "tcp"
// TODO本地调试时放开
/*SERVER= "192.168.103.48"
PORT= 43306*/
// TODO 部署到环境时放开
SERVER= "192.168.66.4"
PORT= 3306
DATABASE = "container_cloud"
)
func main()
var err error
dsn := fmt.Sprintf("%s:%s@%s(%s:%d)/%s?parseTime=1&
multiStatements=1&
charset=utf8mb4&
collation=utf8mb4_unicode_ci", USERNAME, PASSWORD, NETWORK, SERVER, PORT, DATABASE)
db, err := sql.Open("mysql", dsn)
if err != nil
fmt.Printf("Open mysql failed,err:%v\\n", err)
return
//最大连接周期,超过时间的连接就close
db.SetConnMaxLifetime(100 * time.Second)
//设置最大连接数
db.SetMaxOpenConns(100)
//设置闲置连接数
db.SetMaxIdleConns(16)
defer db.Close()
container := routers.InitApiRouter(db)
server := &
http.ServerAddr: ":8090", Handler: container
server.ListenAndServe()
conf:配置文件
routers:路由注册package routers
import (
clusterv1alpha1 "container_cloud/pkg/apis/cluster/v1alpha1"
configv1alpha1 "container_cloud/pkg/apis/config/v1alpha1"
deployv1alpha1 "container_cloud/pkg/apis/deployment/v1alpha1"
image_v1alpha1 "container_cloud/pkg/apis/image/v1alpha1"
job_v1alpha1 "container_cloud/pkg/apis/job/v1alpha1"
nsv1alpha1 "container_cloud/pkg/apis/namespace/v1alpha1"
orderv1alpha1 "container_cloud/pkg/apis/order/v1alpha1"
podv1alpha1 "container_cloud/pkg/apis/pod/v1alpha1"
resource_v1alpha1 "container_cloud/pkg/apis/resource"
svcv1 "container_cloud/pkg/apis/service/v1alpha1"
// pvc_v1alpha1 "container_cloud/pkg/apis/storage/persistentvolumeclaim/v1alpha1"
"container_cloud/pkg/apiserver/filters"
"container_cloud/pkg/domain/resources/v1alpha3/resource"
"database/sql"
"github.com/emicklei/go-restful"
)
func InitApiRouter(db *sql.DB) *restful.Container
container := restful.NewContainer()
resourceGetter := resource.NewResourceGetter()
container.Add(deployv1alpha1.AddToContainer())
// container.Add(pvc_v1alpha1.AddToContainer())
container.Add(svcv1.AddToContainer())
container.Add(clusterv1alpha1.AddToContainer())
container.Add(nsv1alpha1.AddToContainer())
container.Add(image_v1alpha1.AddToContainer(db))
container.Add(orderv1alpha1.AddToContainer(db))
container.Add(resource_v1alpha1.AddToContainer(resourceGetter))
container.Add(configv1alpha1.AddToContainer())
container.Add(podv1alpha1.AddToContainer())
container.Add(job_v1alpha1.AddToContainer())
container.Filter(filters.Authorization)
return container
把每个模块注册进来
访问入口对应的register.go(带数据库)
package v1alpha1
import (
"container_cloud/pkg/api"
"container_cloud/pkg/apiserver/query"
"container_cloud/pkg/apiserver/runtime"
"container_cloud/pkg/controller"
"container_cloud/pkg/domain"
"database/sql"
"github.com/emicklei/go-restful"
"k8s.io/apimachinery/pkg/runtime/schema"
"net/http"
)
const (
GroupName = "order.ictnj.io"
Version= "v1alpha1"
)
var GroupVersion = schema.GroupVersionGroup: GroupName, Version: Version
func AddToContainer(db *sql.DB) *restful.WebService
ws := runtime.NewWebService(GroupVersion)
orderController := controller.NewOrderController(db)
// 创建订单接口,pvc创建、负载创建的时候,是在特定命名空间下。(其实请求入参中也有命名空间字段,资源创建的时候也可以从入参中获取)
ws.Route(ws.POST("/namespaces/namespace/orders").
To(orderController.CreateOrder).
Param(ws.PathParameter("namespace", "namespace name")).
Returns(http.StatusOK, api.StatusOK, map[string]string).
Doc("create order."))
推荐阅读
- 1??通过编写计算器学习ArkUI组件
- MySQL-5.7.16(rpm)安装文档
- 静态模型一键动态化,教你如何集成动作捕捉能力
- SQL审核平台 Archery 之使用进阶二
- (服务注册)
- 2022年区块链影响最大的四个行业
- CentOS Linux 8生命周期结束
- 管理数百个Kubernetes集群需要什么()
- 教你如何在 AlertManager 报警通知中展示监控图表