前言

Go 语言以简单著称,一个很明显的例子就是只需要很少的代码即可实现一个最小的 Web API 。Go-Spring 融合了 Go 简单和 Spring 自动配置的优点。本文通过几个实现最小 Web API 的示例展示 Go-Spring 的简单和强大。

To Gopher

下面是使用 Go 标准库实现的 Hello World! 程序。代码真的很少!

package main

import (
"net/http"
) func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World!"))
})
http.ListenAndServe(":8080", nil)
}

Gin 是目前最火的 Web 框架之一,它实现的 Hello World! 程序如下。也很简单。

package main

import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/ginS"
) func main() {
ginS.GET("/", func(c *gin.Context) {
c.String(200, "Hello World!")
})
ginS.Run()
}

再来看看使用 Go-Spring 实现的 Hello World!程序。同样很简单。

package main

import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
) func main() {
gs.GetMapping("/", func(ctx web.Context) {
ctx.String("Hello World!")
})
gs.Run()
}

但是,可以注意到使用 Go-Spring实现的示例中有一个匿名导入的包,它的作用是告诉 Hello World!程序使用 Gin 作为底层 Web Server 实现。如果我们把这一行改为如下代码,程序仍然可以正常执行,但是这时候程序使用 Echo 作为底层 Web Server 实现。

_ "github.com/go-spring/starter-echo"

虽然 Go-Spring 多了一行匿名包导入,但因此获得了比标准库更强大的能力。

To Javaer

Go-Spring 虽然提供了和 Go 标准库一样的编程模型,但本质上它是基于 IoC (依赖注入) 实现的,因此它具有标准库不具备的自动配置能力,而且与 Java Spring Boot 相比,Go-Spring 的编程效率也不差。

下面是使用 Java Spring Boot 实现的一个 Hello World! 程序,但是与上面的示例不同,为了展示 Java Spring 的依赖注入能力,它同时会打印 JAVA_HOME 环境变量的值。代码如下。

package com.example.demo11;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
class MyController { @Value("${JAVA_HOME}")
String JavaHome; @GetMapping("/")
public String hello() {
return this.JavaHome + " - Hello World!";
} } @SpringBootApplication
public class Demo11Application { public static void main(String[] args) {
SpringApplication.run(Demo11Application.class, args);
} }

下面是使用 Go-Spring 的依赖注入能力实现的能同时打印 GOPATH 环境变量和Hello World! 的程序。代码如下。

package main

import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
) func init() {
gs.Object(new(MyController)).Init(func(c *MyController) {
gs.GetMapping("/", c.Hello)
})
} type MyController struct {
GoPath string `value:"${GOPATH}"`
} func (c *MyController) Hello(ctx web.Context) {
ctx.String(c.GoPath + " - Hello World!")
} func main() {
gs.Run()
}

比较上面两个示例,可以看出 Go-Spring 真正实现了 Go 和 Java Spring 的融合,在保持 Go (语法) 简单的同时具备 Java Spring 的强大配置能力。

通过本文的介绍,你有没有对 Go-Spring 动心呢?赶紧动手试试吧!

使用 Go-Spring 构建最小 Web API的更多相关文章

  1. 2.Spring构建REST Web Service

    上篇文章我们已经对Spring 已经有了一个初步的认识,接下来本篇文章我们将继续一起在官网学习新技术. 原文地址:https://spring.io/guides/gs/rest-service/ 本 ...

  2. 尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性

    本文首发于<尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性> 概述 .NET开发者们大家好,我是Rector. 几天前(美国时间2 ...

  3. 在ASP.NET Core MVC中构建简单 Web Api

    Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 ...

  4. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...

  5. 构建一个基于 Spring 的 RESTful Web Service

    本文详细介绍了基于Spring创建一个“hello world” RESTful web service工程的步骤. 目标 构建一个service,接收如下HTTP GET请求: http://loc ...

  6. 构建Web API服务

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 构建动态Web API控制器 ABP可以自动地为应用层生成Web API 层.比如说我们之前创建的应用层: namespace N ...

  7. Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

    在这篇文章中 概观 演习 概要 由网络营 下载网络营训练包 在传统的Web应用程序中,客户机(浏览器)通过请求页面启动与服务器的通信.然后,服务器处理请求,并将页面的HTML发送给客户端.在与页面的后 ...

  8. 动态Web API层

    返回总目录 本篇目录 构建动态Web API控制器 ForAll 方法 重写ForAll 方法 Http动词 动态Javascript代理 Ajax参数 单一服务脚本 Angular支持 Durand ...

  9. Web API数据传输加密

    http://www.cnblogs.com/wuhuacong/p/4620300.html Web API应用架构设计分析(2) 在上篇随笔<Web API应用架构设计分析(1)>, ...

  10. Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解

    最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相 ...

随机推荐

  1. QT5笔记:3.手动撸界面和可视化托界面混合

    3.手动撸界面和可视化托界面混合 参考视频:https://www.bilibili.com/video/BV1AX4y1w7Nt 3.1 工具栏可以通过在UI界面右键选择添加工具栏 3.2 设置窗口 ...

  2. typecho引入五秒盾,缓解服务器压力

    功能是:对访客的访问频率会先一步判断,根据用户自定义的范围,将频率过高的访客跳转向127.0.0.1,而没有达到频率的访客则会进行cookies验证,这样更大程序的对恶意流量攻击进行拦截,并且有效缓解 ...

  3. 08_使用python 内置 json 实现数据本地持久化

    使用python 内置 json 实现数据本地持久化 四个json函数 函数 json.load() 将本地json数据文件读取出来,并以列表形式返回从文件对象中读取 JSON 格式的字符串,并将其反 ...

  4. ctfhub-rce-部分做题记录

    命令注入 检查网页显示内容,可以直接看到源代码.大致意思是:检查用户输入的 GET 请求,判断用户是否输入了 ip 信息.如果输入了 ip 信息,则使用用户输入的这个 ip 数据执行一个 shell ...

  5. Navicat 数据库如何再次打开恢复上次的页面

    选项->选项卡->从上次离开的画面继续 2.其他软件有这个需求也可以在设置里找一找!

  6. xpath 定位表格里面内容

    向上找页面唯一元素,依次为: 表格体/第一行/第14列 实现代码 Xpath==//tbody/tr[1]/td[11]

  7. Netty基础—3.基础网络协议

    大纲 1.网络基础的相关问题总结 2.七层模型和四层模型 3.物理层(网线 + 光缆 + 01电信号) 4.数据链路层(以太网协议 + 网卡mac地址) 5.网络层(IP协议 + 子网划分 + 路由器 ...

  8. AXUI一个面向设计的UI前端框架,好用

    以下是官方介绍: ax的中文意义是:斧子,读音[aeks],取其攻击力强.简单实用之意为本前端框架命名.本团队开发了诸多网站项目,使用了许多常见的前端框架,结合实际项目经验,借鉴了同行的经验,特自主开 ...

  9. mac输入法 cpu占用,解决mac使用输入法出现卡顿延迟

    1.介绍 网上有各种方法,例如有touchbar的macbook关闭输入建议:定时重启"简体中文输入法"进程:关闭"显示器具有单独的空间" 这些方法网上都能看到 ...

  10. MongoDB 简单介绍

    MongoDB介绍 疑问 解答 什么是 MongoDB 一个以 JSON 为数据模型的文档数据库 为什么叫文档数据库? 文档来自于 "JSON Document",并非我们一般理解 ...