8、代码结构优化

本文展示了如何优化Go语言中的main函数,通过使用匿名函数处理HTTP请求,并改进JSON返回结构,利用结构体和omitempty属性减少无用数据传输。主要涉及参数解析、登录逻辑及错误处理。
摘要由CSDN通过智能技术生成

一、优化main函数的匿名函数(对函数结构进行优化)

 
package main
import (
	"net/http"
)
func userLogin(writer http.ResponseWriter, request *http.Request) {
	//数据库操作
	//逻辑处理
	//restapi json/xml 返回
	//1.获取前端传递的参数
	//mobile,passwd
	//如何获取参数
	//解析参数
	request.ParseForm()
	mobile := request.PostForm.Get("mobile")
	passwd := request.PostForm.Get("passwd")
	loginOk := false
	if mobile == "xxxxxxxxxxx" && passwd == "123456" {
		loginOk = true
	}
	str := `{"code":0,"data":{"id":1,"token":"test"},"msg":"登录成功"}`
	if !loginOk {
		//返回失败的JSON
		str = `{"code":-1,"data":"","msg":"密码不正确"}`
	}
	//设置header 为JSON 默认的text/html,所以特别指出返回的为application/json
	writer.Header().Set("Content-Type", "application/json")
	//设置200状态
	writer.WriteHeader(http.StatusOK)
	//输出
	writer.Write([]byte(str))
}
func main() {
	//把前端请求的格式和封装处理函数进行绑定的标签
	//绑定请求和处理函数
	http.HandleFunc("/user/login", userLogin)
	//启动web服务器
	http.ListenAndServe(":8080", nil)
}

二、优化返回Json代码

 
package main
import (
	"encoding/json"
	"log"
	"net/http"
)
func userLogin(writer http.ResponseWriter, request *http.Request) {
	//数据库操作
	//逻辑处理
	//restapi json/xml 返回
	//1.获取前端传递的参数
	//mobile,passwd
	//如何获取参数
	//解析参数
	request.ParseForm()
	mobile := request.PostForm.Get("mobile")
	passwd := request.PostForm.Get("passwd")
	loginOk := false
	if mobile == "xxxxxxxxxxx" && passwd == "123456" {
		loginOk = true
	}
	if loginOk {
		//{"id":1,"token":"xx"}
		data := make(map[string]interface{})
		data["id"] = 1
		data["token"] = "test"
		Resp(writer, 0, data, "登录成功")
	} else {
		Resp(writer, -1, nil, "密码不正确")
	}
}
type H struct {
	Code int
	Msg  string
	Data interface{}
}
func Resp(w http.ResponseWriter, code int, data interface{}, msg string) {
	//设置header 为JSON 默认的text/html,所以特别指出返回的为application/json
	w.Header().Set("Content-Type", "application/json")
	//设置200状态
	w.WriteHeader(http.StatusOK)
	//定义一个结构体
	h := H{
		Code: code,
		Msg:  msg,
		Data: data,
	}
	//将结构体转化成JSON字符串
	ret, err := json.Marshal(h)
	if err != nil {
		log.Println(err.Error())
	}
	//输出
	w.Write([]byte(ret))
}
func main() {
	//把前端请求的格式和封装处理函数进行绑定的标签
	//绑定请求和处理函数
	http.HandleFunc("/user/login", userLogin)
	//启动web服务器
	http.ListenAndServe(":8080", nil)
}

三、优化结构体返回结果集

添加omitempty属性,接口失败时不返回data

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值