一文搞懂使用Go语言快速搭建HTTP服务

简介: 一文搞懂使用Go语言快速搭建HTTP服务

第一个http程序:Hello World

package main

import "net/http"

//最简单的HTTP服务
func RunHttp1() {
   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      w.Write([]byte("Hello Http!"))
   })
   http.ListenAndServe(":8080", nil)
}

func main() {
   RunHttp1()
}

PostMan测试:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAWs0Gpa-1639888646018)(一文搞懂Go快速搭建HTTP服务.assets/image-20211212103712537.png)]

一般请求

一般参数请求:

package main

import (
    "fmt"
    "net/http"
)

func GetMethod1() {
   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      //获取参数
      str := r.URL.Query().Get("str")
      fmt.Println("Get Method Str is " + str)
      w.Write([]byte("Hello Http Get!"))
   })
   http.ListenAndServe(":8080", nil)
}


func main() {
    GetMethod1()
}

测试:

在这里插入图片描述

表单请求

package main

import (
   "fmt"
   "net/http"
   "strconv"
)

type Student struct {
   Name string
   Age  int
}

func GetMethod2() {
   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      //获取参数
      name := r.URL.Query().Get("name")
      age := r.URL.Query().Get("age")
      //将string类型转为int类型
      ageStr, err := strconv.Atoi(age)
      if err != nil {
         fmt.Println("err...")
      }
      stu := Student{Name: name, Age: ageStr}
      fmt.Println("Get Method Str is ", stu)
      w.Write([]byte("Hello Http Get Form!"))
   })
   http.ListenAndServe(":8080", nil)
}

func main() {
   GetMethod2()
}

JSON格式的HTTP报文

package main

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

//自定义结构体 对应JSON结构体
type Student struct {
   Id   int64  `json:"id"`
   Name string `json:"name"`
   Age  int    `json:"age"`
}

func TakeJSON() {
   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      //获取请求方法
      fmt.Println("req method : ", r.Method)
      //获取请求题
      body, err := ioutil.ReadAll(r.Body)
      if err != nil {
         fmt.Printf("获取请求体错误 , %v\n", err)
         return
      }
      fmt.Println("请求体 :", string(body))
      //将请求的JSON转化为结构体
      var stu Student
      if err = json.Unmarshal(body, &stu); err != nil {
         fmt.Printf("反序列化失败 , %v\n", err)
         return
      }
      fmt.Printf("反序列化成功,JSON解析结果 %+v", stu)
      w.Write([]byte("Hello Http Get Form!"))
   })
   http.ListenAndServe(":8080", nil)
}

func main() {
   TakeJSON()
}
相关文章
|
22天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
35 7
|
21天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
22天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
94 71
|
21天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
101 67
|
2天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
27 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
22天前
|
存储 Go
go语言中映射
go语言中映射
33 11
|
13天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
Go 调度 Python
golang 服务平滑重启小结
背景 golang 程序平滑重启框架 supervisor 出现 defunct 原因 使用 master/worker 模式 背景 在业务快速增长中,前期只是验证模式是否可行,初期忽略程序发布重启带来的暂短停机影响。
1612 0
|
24天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
93 62
|
24天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
32 12