Go语言学习14-常见任务

Go语言学习14-常见任务

内置的 JSON 解析

利用反射实现, 通过 FieldTag 来标识对应的 json 值

type BasicInfo struct {Name string `json:"name"`Age  int    `json:"age"`
}
type JobInfo struct {Skills []string `json:"skills"`
}
type Employee struct {BasicInfo BasicInfo `json:"basic_info"`JobInfo   JobInfo   `json:"job_info"`
}
// embedded_json_test.go
var jsonStr = `{"basic_info":{"name":"Mike","age":30},"job_info":{"skills": ["Java", "Go", "C"]}
}`func TestEmbeddedJson(t *testing.T) {e := new(Employee)err := json.Unmarshal([]byte(jsonStr), e)if err != nil {t.Error(err)}fmt.Println(*e)if v, err := json.Marshal(e); err == nil {fmt.Println(string(v))} else {t.Error(err)}
}

更快的 JSON 解析

EasyJSON 采用代码生成而非反射

安装

go get -u github.com/mailru/easyjson/...

使用

easyjson -all <结构定义>.go

HTTP Server

func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello World!")})http.HandleFunc("/time/", func(w http.ResponseWriter, r *http.Request) {t := time.Now()timeStr := fmt.Sprintf("{\"time\": \"%s\"}", t)w.Write([]byte(timeStr))})http.ListenAndServe(":8080", nil)
}
路由规则
  • URL 分为两种,末尾是 / :表示一个子树,后面可以跟其他子路径; 末尾不 是 /,表示一个叶子,固定的路径

    以/ 结尾的 URL 可以匹配它的任何子路径,比如 /images 会匹配 /images/cute-cat.jpg

  • 它采用最长匹配原则,如果有多个匹配,一定采用匹配路径最长的那个进行处

  • 如果没有找到任何匹配项,会返回 404 错误

Default Router
func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request) {handler := sh.srv.Handlerif handler == nil {handler = DefaultServeMux}if req.RequestURI == "*" && req.Method == "OPTIONS" {handler = globalOptionsHandler{}}handler.ServeHTTP(rw, req)
}
构建Restful服务
更好的Router

https://github.com/julienschmidt/httprouter

func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {  fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name"))
}func main() {router := httprouter.New()  router.GET("/", Index)router.GET("/hello/:name", Hello)log.Fatal(http.ListenAndServe(":8080", router))
}
面向资源的架构(Resource Oriented Architecture)

In software engineering, a resource-oriented architecture (ROA) is a style of software architecture and programming paradigm for supportive designing and developing software in the form of Internetworking of resources with “RESTful” interfaces.

type Employee struct {ID   string `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var employeeDB map[string]*Employeefunc init() {employeeDB = map[string]*Employee{}employeeDB["Mike"] = &Employee{ID:   "e-1",Name: "Mike",Age:  35,}employeeDB["Rose"] = &Employee{ID:   "e-2",Name: "Rose",Age:  45,}
}func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {fmt.Fprint(w, "Welcome!\n")
}func GetEmployeeByName(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {qName := ps.ByName("name")var (ok       boolinfo     *EmployeeinfoJson []byteerr      error)if info, ok = employeeDB[qName]; !ok {w.Write([]byte("{\"error\":\"Not Found\"}"))return}if infoJson, err = json.Marshal(info); err != nil {w.Write([]byte(fmt.Sprintf("{\"error\":,\"%s\"}", err)))return}w.Write(infoJson)
}func main() {router := httprouter.New()router.GET("/", Index)router.GET("/employees/:name", GetEmployeeByName)log.Fatal(http.ListenAndServe("localhost:8080", router))
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/279479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软AI系列 C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度

在C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度。你可以使用.NET中的深度学习库如TensorFlow.NET来加载预训练模型&#xff0c;提取特征&#xff0c;并进行相似度计算。 以下是一个使用TensorFlow.NET的示例&#xff1a; using System; using …

云原生:重塑未来应用的基石

随着数字化时代的不断深入&#xff0c;云原生已经成为了IT领域的热门话题。它代表着一种全新的软件开发和部署范式&#xff0c;旨在充分利用云计算的优势&#xff0c;并为企业带来更大的灵活性、可靠性和效率。今天我们就来聊一聊这个热门的话题&#xff1a;云原生~ &#x1f4…

5.shell中的函数

目录 概述实践shell结果 结束 概述 shell中函数的使用 实践 shell #!/bin/bash # 函数、无参无返回值&#xff0c;调用不用括号xyz(){echo "hello this is fun" } xyz# 如何向定义的函数传参? 通过位置参数 xyz_with_params(){echo "shell传参个数为:$#&qu…

ubuntu20.04_PX4_1.13

说在前面&#xff1a;&#xff08;最好找一个干净的Ubuntu系统&#xff09;如果配置环境的过程中出现很多编译的错误或者依赖冲突&#xff0c;还是建议新建一个虚拟机&#xff0c;或者重装Ubuntu系统&#xff0c;这样会避免很多麻烦&#x1f490; &#xff0c; 安装PX4 1.13.2 …

web前端之多种方式实现switch滑块功能、动态设置css变量、after伪元素、选择器、has伪类

MENU 效果图htmlcsshtmlcssJS 效果图 htmlcss html <div class"s"><input type"checkbox" id"si" class"si"><label for"si" class"sl"></label> </div>style * {margin: 0;pad…

百度交易中台之系统对账篇

作者 | 天空 导读 introduction 百度交易中台作为集团移动生态战略的基础设施&#xff0c;面向收银交易与清分结算场景&#xff0c;赋能业务、提供高效交易生态搭建。目前支持百度体系内多个产品线&#xff0c;主要包括&#xff1a;度小店、小程序、地图打车、文心一言等。本文…

HighTec_TC4 编译器移植 Aurix ADS

ADS 是英飞凌推出的针对 AURIX 芯片的开发平台&#xff0c;该开发环境基于业内流行的 Eclipse 打造而成。 HighTec 作为英飞凌的全球重要合作伙伴和 PDH&#xff0c;作为专业的编译器供应商和嵌入式产品方案提供商&#xff0c;HighTec 早已经为英飞凌最新一代 AURIX TC4XX 芯片…

windows 多网卡情况dns解析超时问题的排查

最近遇到一个问题 多网卡&#xff0c;多网络环境下&#xff0c;dns解析总是超时。 排查之后发现是dns配置的问题&#xff0c;一个有线网络配置的内网dns&#xff0c;一个无线网络配置的公网dns 访问公网时莫名的时不时出现超时现象 初步排查是dns解析的耗时太长&#xff0c;…

AI助手 - 月之暗面 Kimi.ai

前言 这是 AI工具专栏 下的第四篇&#xff0c;这一篇所介绍的AI&#xff0c;也许是截至今天&#xff08;204-03-19&#xff09;国内可访问的实用性最强的一款。 今年年初&#xff0c;一直看到有人推荐 Kimi&#xff0c;不过面对雨后春笋般的各类品质的AI&#xff0c;说实话也有…

添加与搜索单词 - 数据结构设计

题目链接 添加与搜索单词 - 数据结构设计 题目描述 注意点 addWord 中的 word 由小写英文字母组成search 中的 word 由 ‘.’ 或小写英文字母组成1 < word.length < 25 解答思路 为了加快查询速度&#xff0c;可以使用字典树存储单词&#xff0c;基本结构是&#xf…

STM32通信协议

STM32通信协议 STM32通信协议 STM32通信协议一、通信相关概念二、通信协议引脚作用三、通信方式四、采样方式五、电平信号六、通信对象 一、通信相关概念 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 通信协议&#xff1a;制定…

基于Spring Boot+Vue的智慧图书管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 一、项目简介 如今社会上各行各业&…

Linux课程_____网络管理

一、查看接口信息 1. ifconfig 查看所有活动网络接口的信息 ifconfig -a 查看所有网络接口信息 ifconfig 直接加网络接口 查看指定网络接口信息 1.1查看指定接口IP [rootlocalhost ~]# ip addr show ens160 1.2设置网络接口的IP地址 # ifconfig eth0 192.168.152.133 …

服务器硬件基础知识和云服务器的选购技巧

概述 服务器硬件基础知识涵盖了构成服务器的关键硬件组件和技术&#xff0c;这些组件和技术对于服务器的性能、稳定性和可用性起着至关重要的作用。其中包括中央处理器&#xff08;CPU&#xff09;作为服务器的计算引擎&#xff0c;内存&#xff08;RAM&#xff09;用于数据临…

图片不想要的部分怎么去除?

图片不想要的部分怎么去除&#xff1f;随着数字摄影技术的发展&#xff0c;我们拍摄的照片数量越来越多。然而&#xff0c;有时候我们会发现在一张照片中有一些不想要的元素或者杂乱的背景。那么如何去除图片中的这些不想要的部分呢&#xff1f;首先&#xff0c;我们可以使用图…

BetterDisplay Pro for Mac(显示器校准软件) v2.0.11激活版

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a;BetterDisplay Pro for Mac v2.0.11激活版 以下是BetterDisplay Pro的主要特点&…

Python内置对象

Python是一种强大的、动态类型的高级编程语言&#xff0c;其内置对象是构成程序的基础元素。Python的内置对象包括数字、字符串、列表、元组、字典、集合、布尔值和None等&#xff0c;每种对象都有特定的类型和用途。 01 什么是内置对象 这些对象是编程语言的基础构建块&…

Covalent Network借助大规模的历史Web3数据集,推动人工智能发展

人工智能在众多领域中增强了区块链的实用性&#xff0c;反之亦然&#xff0c;区块链确保了 AI 模型所使用的数据的来源和质量。人工智能带来的生产力提升&#xff0c;将与区块链系统固有的安全性和透明度融合。 Covalent Network&#xff08;CQT&#xff09;正位于这两项互补技…

Django单表数据库操作

单表操作 测试脚本 当你只想测试django某一个py文件的内容,可以不用书写前后端的交互,直接写一个测试脚本即可 单表删除 数据库操作方法: 1.all():查询所有的数据 2.filter():带有过滤条件的查询 3.get():直接拿数据对象,不存在则报错 4.first():拿queryset里面的第一个元素…

Python分析无人驾驶汽车在桂林市文旅行业推广的问卷

【项目背景】 通过市场调研、文本分析、访谈和问卷调查等方法&#xff0c;探讨&#xff1a; 网民对无人驾驶汽车出行服务的态度。无人驾驶安全员的行业背景。不同人群在旅游时的交通选择偏好。游客及当地居民对桂林市文旅路线的交通满意度。乘客对无人驾驶汽车的满意度。桂林…