Fiber

快速开始 依赖引入 1 go get github.com/gofiber/fiber/v2 零分配 在Fiber中,*fiber.ctx是可变的,因此ctx只能在处理程序中使用,且不可以保留任何引用。 1 2 3 4 func handler(c *fiber.Ctx) error { //变量仅在此处理程序中有效 result := c.Params("foo") } 如果需要持久化存储,请使用copy()构建底层缓冲区副本。 1 2 3 4 5 6 7 8 9 func handler(c *fiber.Ctx) error { //变量仅在此处理程序中有效 result := c.Params("foo") //制作副本 buffer := make([]byte, len(result)) copy(buffer, result) resultCopy := string(buffer) } 也可以使用ImmutableString函数直接变量拷贝 1 2 3 4 5 6 app.Get("/:foo", func(c *fiber.Ctx) error { //变量现在是不可变的 result := utils.ImmutableString(c.Params("foo")) // ... }) Hello World 1 2 3 4 5 6 7 8 9 10 11 12 13 package main import "github.com/gofiber/fiber/v2" func main() { app := fiber.New() app.Get("/", func(c *fiber.Ctx) error { return c.SendString("Hello, World!") }) app.Listen(":3000") } Fiber包 New 创建一个新的 App 命名实例并传递可选配置 ...

2024-08-21 · 3 分钟 · Nebula

Gin

快速开始 依赖引入 1 go get -u github.com/gin-gonic/gin 1 import "github.com/gin-gonic/gin" 创建服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { engine := gin.Default() engine.GET("/", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello World!", }) }) engine.Run(":52100") } 框架基础 请求参数 路由参数 绑定路由参数时,使用:作为前缀,例如:paramName 通过context.Param("paramName")获取参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package main import ( "github.com/gin-gonic/gin" "log" "net/http" ) func main() { e := gin.Default() e.GET("/findUser/:username/:userid", FindUser) e.GET("/downloadFile/*filepath", UserPage) log.Fatalln(e.Run(":8080")) } // 命名参数示例 func FindUser(c *gin.Context) { username := c.Param("username") userid := c.Param("userid") c.String(http.StatusOK, "username is %s\n userid is %s", username, userid) } // 路径参数示例 func UserPage(c *gin.Context) { filepath := c.Param("filepath") c.String(http.StatusOK, "filepath is %s", filepath) } 请求参数 context.DefaultQuery("username", "defaultUser")获取请求参数,如果参数不存在则返回默认值 ...

2024-08-19 · 10 分钟 · Nebula

Ktor

基础入门 更改默认端口 代码配置 Application.kt 1 2 3 4 5 6 7 8 9 10 11 12 fun main() { embeddedServer( Netty, port = 8080, //更改端口 host = "0.0.0.0", module = Application::module ).start(wait = true) } fun Application.module() { configureRouting() } yaml配置 Application.kt 1 2 3 4 5 6 7 fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args) @Suppress("unused") fun Application.module() { configureRouting() } application.yaml 1 2 3 4 5 6 ktor: application: modules: - com.example.ApplicationKt.module deployment: port: 8080 添加新端点 plugins/Routing.kt ...

2024-08-09 · 4 分钟 · Nebula

Quarkus

第一个应用 应用结构 端点 -> 资源 -> 服务 依赖结构 Quarkus BOM的导入,允许省略不同Quarkus依赖的版本 1 2 3 4 5 6 7 8 9 10 11 12 <dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 看到 quarkus-maven-plugin ,负责应用程序的打包,也提供开发模式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <build> <plugins> <plugin> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions> </plugin> </plugins> </build> Gradle同理 ...

2024-08-09 · 4 分钟 · Nebula

Spring

Spring Framework 注:所有xml省略spring格式,需添加 IOC的XML配置详解 配置bean示例 xml如下: 1 <bean id="impl别名" class="impl的全类名"/> java如下: 1 2 3 4 5 6 7 8 9 10 //这是被注入对象 class java { public static void main(String[] args) { //获取IOC容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("xml文件名"); //获取bean 目标对象接口 对象名 = (目标对象接口类型强转) ctx.getBean("xml中的id属性值"); 对象名.成员方法; } } DI的XML配置详解 xml部分 1 2 3 4 5 6 <!--给A注入B,A中包含B对象--> <bean id="A别名" class="A全类名"/> <bean id="B别名" class="B全类名"> <property name="A类中的B对象名" ref="A别名"/> <!--将name值反过来也可以实现反向注入--> </bean> java部分 ...

2024-08-09 · 3 分钟 · Nebula