IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

gin系列-gin安装和简单应用

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

前言

我一直这么认为:不会一门语言不能说自己是搞IT的,不会数据结构不能说自己是搞开发的。

用了15天时间复习了一遍go语言,自我感觉小有成就。在学数据结构和web之间纠结。最终决定先web后数据结构。

go语言的原生net/http就已经足够优秀了,go也有几个出名的框架。我选择从gin框架入门web。框架是一个已经搭建起来的舞台,可以在这个舞台上进行自己的表演,虽有局限,但总是便捷。

学习资料参考:https://www.liwenzhou.com/posts/Go/Gin_framework/

原生net/http学习参考:链接:https://pan.baidu.com/s/16y_Gne7DiWq4yCwVhqKOdw 提取码:olzo

计划一个星期入门gin 一个星期拿出项目。

web开发的本质

最最最重要的一张图 一个请求对应一个响应
109_1.png
牢记以下三点:

请求:客户端发起请求(HTTP协议)

处理:服务器处理请求

响应:服务器将处理结果发送给客户端’
用户访问网站的基本流程:https://blog.csdn.net/zisefeizhu/article/details/81031862

开始

新建项目:
109_2.png

用net/http库写个简单的web

net/http库:https://www.liwenzhou.com/posts/Go/go_http/
109_3.png

//main.go
package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func sayHello(w http.ResponseWriter, r *http.Request)  {
    //file, err := os.Open("./hello.txt")
    //if err != nil {
    //  fmt.Println("Open file err = ", err)
    //}
    //defer file.Close()
    //const (
    //  defaultBufSize = 4096
    //)
    //reader := bufio.NewReader(file)
    //for  {
    //  str ,err := reader.ReadString('\n')
    //  if err == io.EOF {
    //      break
    //  }
    //  _, _ = fmt.Fprintln(w,string(str) )
    //}
    b, _ := ioutil.ReadFile("./hello.txt")   //内容不是特别多
    _, _ = fmt.Fprintln(w,string(b) )
}

func main() {
    http.HandleFunc("/hello",sayHello)
    err := http.ListenAndServe(":8080",nil)
    if err != nil {
        fmt.Printf("http serve failed, err:%v\n", err)
        return
    }
}


//hello.txt
<h1 style='color:red'>Hello zisefeizhu</h1>
<h2 style='color:yellow'> How are you ,jingxing</h2>
<h3 style='color:green'>Hello yike</h3>
<img id='i1' src='http://pic.baike.soso.com/ugc/baikepic2/7300/cov-20181211225313-1925802771_jpg_570_711_43751.jpg/300'>
<button id='b1'>点我</button>
<script>
document.getElementById('b1').onclick=function(){
    document.getElementById('i1').src='http://pic.baike.soso.com/ugc/baikepic2/14050/20170916105801-135337938_jpg_374_479_21448.jpg/0'
}
</script>

E:\gostudent\gin>go run main.go

浏览器访问:
109_4.png

点击点我
109_5.png
109_6.png
完成最最简单的web

我们关注的不是hello.txt里面的内容,这是前端的问题。函数调用才是关注的点。

gin安装及简单使用

gin 中文文档:https://gin-gonic.com/zh-cn/docs/

下载并安装Gin

E:\gostudent\gin>go get -u github.com/gin-gonic/gin

示例

import "github.com/gin-gonic/gin"

func sauHello(c *gin.Context)  {
    c.JSON(200,gin.H{    //// c.JSON:返回JSON格式的数据
        "message": "Hello zisefeizhu",
    })
}

func main()  {
    //创建一个默认的路由引擎
    r := gin.Default()

    // GET:请求方式;/hello:请求的路径
    // 当客户端以GET方法请求/hello路径时,会执行后面的sayHello函数
    r.GET("/hello", sauHello)

    //启动HTTP服务,默认在0.0.0.0:8080启动服务
    r.Run()
  //r.Run(":9090")  //改端口
}

E:\gostudent\gin>go run main.go    //显示defug
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /hello                    --> main.sauHello (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080

浏览器
109_7.png
将上面的代码保存并编译执行,然后使用浏览器打开127.0.0.1:8080/hello就能看到一串JSON字符串。

RESTFUL API

REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。

简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。

  • GET用来获取资源
  • POST用来新建资源
  • PUT用来更新资源
  • DELETE用来删除资源

只要API程序遵循了REST风格,那就可以称其为RESTful API。目前在前后端分离的架构中,前后端基本都是通过RESTful API来进行交互。

举例:现在要编写一个管理书籍的系统,我们可以查询对一本书进行查询、创建、更新和删除等操作,我们在编写程序的时候就要设计客户端浏览器与我们Web服务端交互的方式和路径。

请求方法 URL 含义
GET /book 查询书籍信息
POST /book 创建书籍记录
PUT /book 更新书籍信息
DELETE /book 删除书籍信息

Gin框架支持RESTful API的开发。

简单入门

import "github.com/gin-gonic/gin"

func main()  {
    //创建一个默认的路由引擎
    r := gin.Default()

    // r.XXX:请求方式;/book:请求的路径
    // 当客户端以XXX方法请求/book路径时,会执行后面的匿名函数
    r.GET("/book", func(c *gin.Context) {
        c.JSON(200,gin.H{
            "message" : "GET",
        })
    })

    r.POST("/book", func(c *gin.Context) {
        c.JSON(200,gin.H{
            "message":"POST",
        })
    })

    r.PUT("/book", func(c *gin.Context) {
        c.JSON(200,gin.H{
            "message":"PUT",
        })
    })

    r.DELETE("/book", func(c *gin.Context) {
        c.JSON(200,gin.H{
            "message":"DELETE",
        })
    })
    //r.Run("9090")
    r.Run(":9090")
}

开发RESTful API的时候我们通常使用Postman来作为客户端的测试工具。
109_8.png

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main()  {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "pong",
        })
    })
    r.Run(":9090")
}

109_9.png
匹配所有请求方法

func main()  {
    r := gin.Default()
    r.Any("/ping", func(c *gin.Context) {   //Any方法
        c.JSON(http.StatusOK, gin.H{
            "message": "pong",
        })
    })
    r.Run(":9090")
}

109_10.png

文章永久链接:https://tech.souyunku.com/?p=38590


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(97) 打赏



未经允许不得转载:搜云库技术团队 » gin系列-gin安装和简单应用

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367