前言

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. min-max 容斥(最值反演)学习笔记

    min-max 容斥,又名最值反演(我其实更喜欢后面这个名字),是一种常用的反演思想. 引入 在皇后游戏一题中,我们曾经证明过 \(\max(a,b)-a-b=-\min(a,b)\). 我们尝试推广 ...

  2. java list集合去重的两种方式

  3. LCP 11. 期望个数统计

    地址:https://leetcode-cn.com/problems/qi-wang-ge-shu-tong-ji/ <?php /** 某互联网公司一年一度的春招开始了,一共有 n 名面试者 ...

  4. win7系统清理C盘空间方法实测

    问题描述:win7电脑C盘容易满,采用如下方法清理 方法一:win+r,输入%temp%查看临时文件,手动删除不需要的文件 方法二:减小休眠文件:如果你很少使用休眠模式,可以通过win+r输入cmd命 ...

  5. 如何学好.net core?

    https://www.zhihu.com/question/348740859/answer/842656513

  6. 介绍一个不知道怎么形容的小东西--Proxy

    what's this? The Proxy object is used to define custom behavior for fundamental operations (e.g. pro ...

  7. Tiki靶机练习

    Scan 先arp-scan -l扫描附件主机ip nmap -sS -sV -n -T4 -p- 192.168.93.132 Starting Nmap 7.94SVN ( https://nma ...

  8. Docker restart 重启容器

    就像很多常驻后台应用程序动不动可能就需要重启操作一样,有时候我们可能也需要重启容器 而重启容器使用的就是 docker restart 命令 docker restart <container_ ...

  9. 包装类面试题--java进阶day05

    1.面试题 如下两个输出,请问分别是true还是false呢? 答案: 当范围在-128~127时,对象相同就会返回true 在讲解这个问题之前,先了解自动装箱的原理 2.自动装箱的原理 自动装箱,就 ...

  10. 小白必看的java完整下载攻略!(在Typora中有图片参考)

    Java下载 在浏览器上搜索JDK(2024年最新版是22,本人下载的是21) 点击官网下载,会跳到Oracle官网,需要注册账号才可下载 根据自己的电脑型号选择下载(本人下载的是64的) 正常情况下 ...