golang 中定义一个静态全局变量_golang web开发——内存中crud练习 - Go语言中文社区

golang 中定义一个静态全局变量_golang web开发——内存中crud练习


背景

上一篇小文章,简单的用goland搭建一个最简单的golang的demo,没有什么实际价值,用的golang语法也比较少,这个小节我们完成一个简单的crud的操作,快速了解golang的一些常用的操作,能够熟练掌握golang基本的语法

语法提前了解

  1. string转成int 在golang中使用strconv.Atoi方法
  2. golang中方法的返回值可以有多个,这个跟java不一样,例如map[id]这样的方式,第一个返回值就是value,第二个返回值是bool类型,表示是否存在
  3. 和java中json序列化的方式比较像,反序列化是json.Unmarshal方法,第一个参数是字节数组,第二个参数是序列化对象的"地址",要加一个&,序列化的方式json.Marshal方法,注意这个方法返回的字节数组

上面这个小节用的语法在下面的练习中是经常用到的,小伙伴们可以简单地记忆一下

练习

1.我们简单地定义一个User类,用golang完成关于这个结构体实例的增删改查,我们定义一个结构体如下所示,有三个属性Id,Name,Age

19b9d766181465a647148fb9a31c6388.png

2.因为是在内存中做增删改查的,没有用到数据库的,所以我们要像java一样定义一个全局变量,作为一个容器来保存数据,如下图源码所示,我们使用关键字var定义一个全局变量map,并初始化一条记录

94d46273889708ca0fc4f7591d323466.png

3.然后定义四个"RequestMapping"如下所示

56e62ed0125d0dacc1c4220a72d1993f.png

3.1 getUser方法主要的逻辑就是获取传递的参数id,然后根据id去全局变量中获取user基本信息

eebe40c7dc0a0f4276d670542f6fe339.png

3.2 saveUser我们处理POST请求,现在开发中一般传递过来的json数据,我们解析json到对应,然后保存到我们全局变量中

220c0c82f540a3c8b12f720eaaca9e6a.png

3.3 updateUser和saveUpdate比较像,为了简单,我们这边只判断如果全局map中对应的id存在的话,就变更这个id对应的user对象,就不进行属性比较和替换了

7d12aab47dbd7f5c99bbe39aeb56bcdf.png

3.4 deleteUser就更加简单了,直接删除map中对应的id就可以了

2aa91ae05ee8c0be14b90e6399b92194.png

测试

1.getUser的测试

79c8bf0d147005be27cae5502300f5f5.png

2.saveUser的测试

ec8342a69ca147157767e459901db0ab.png
d2d777dfd4bc6e50ad9f1a2c3b4271e3.png

3.updateUser的测试

c7bbda15c91440759faa03200ef0fc40.png
3396efdeb07a1101c8a56c513058f1a9.png

4.

d744cedac788abbc6ccf4c7cdc09483c.png

小结

本小节主要完成了在内存中做增删改查,其实如果你完全掌握golang的基本语法,你肯定会觉得很小儿科,不过这个没有关系,有些新同学肯定也是有一点收获的,如果你仔细看上面的代码,你肯定会发现一些问题,你会发现我们解析参数的方式只有2种,一种是localhost:9090/user?id=1这种获取id的方式,获取是获取post请求中的json,如果我们想像spring mvc中@requestMapping(value="/user/{name}/种是localhost:9090/user?id=1这种获取id的方式,获取是获取post请求中的json,如果我们想像spring mvc中@requestMapping(value="/user/{name}/{id}")这样的方式就不行了,然后通过@pathvariable方法来获取参数,这个在我们日常工作中很有用,但是非常遗憾,golang 原生并不是支持这样相对比较复杂的参数绑定工作的,这个我们将通过一个数据结构Trie来解决这个问题

源码地址

https://github.com/BazingaLyn/jarvis

如果你喜欢本系列的入门教程,希望你能关注点赞收藏,素质三连谢谢~

彩蛋

如果你手敲代码的时候,你会发现(writer http.ResponseWriter, request *http.Request)需要写很多遍,goland提供了快捷键快速生成方法了,但是每个人快捷键设置的可能不一样,但是可以用如下的方式快速生成方法

a191bb86bc219f93481604b407504757.png
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42499159/article/details/112098728
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-12 19:55:00
  • 阅读 ( 663 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢