Golang 中的 RESTful API 最佳实践

RESRful API已经流行很多年了,我也一直在使用它。最佳实践也看过不少,但当一个项目完成,再次回顾/梳理项目时,会发现很多API和规范还是多少有些出入。在这篇文章中,我们结合Go Web再次梳理一下RESTful API的相关最佳实践。 ...

2020-03-15  ·  Go学习笔记 Go实战  ·  restful api golang

折腾服务器(开篇) 我的第一台个人服务器

在对比过VPS,NUC,二手企业服务器,自己组装等方案后,决定还是选择后者。考虑到自己的需求并不要求多高性能(玩玩Gitlab、CI/CD、harbor、k8s、放一些工具、物联网终端等等),以及耗能低、安静,最主要总体价格要低等特点,最后选配如下: 配件 价格 备注 ASROCK/华擎科技J4105M集成主板+海盗船 2400 DDR4 8Gx2 ¥1099 CPU是4核1.50 GHz的(最高2.5),能耗10w 乔思伯 C2 台式机电脑机箱 ¥139 航嘉 冷静王钻石版 额定300W ¥179 如果不选这机箱,其实可以选个更小的电源 旧的固态 120G + 西数蓝盘 1T 0 蓝盘不知道能撑多久== 总体下来,1500大洋不到,比开一个vps便宜多了==。 话不多说,上图。 ​ 集成主板、内存条、硬盘 ​ 机箱、电源 最后,来一张电信悦me网关、Newifi3 和 装机后的全家福(装机过程略==)。 接下来就开始我的折腾之旅~。

2019-12-19  ·  家庭网络折腾 个人服务器  ·  服务器

Newifi3 实现低成本家庭级科学上网

为了搭建一个家庭智能科学上网的环境,想找个支持Openwrt的路由刷一刷, 观望了一段时间,入手了款矿渣newifi3 d2,虽说有人吐槽信号不好,然而房间小的我并不担心==。 ...

2019-09-01  ·  家庭网络折腾  ·  newifi3 homelab

Go学习笔记(八) | 使用 os/exec 执行命令

用Go去调用一些外部的命令其实很愉快的,这遍文章就总结一下我自己日常用的比较多的几种方法。 关于Unix标准输入输出 在具体聊os/exec的使用前,了解一下shell的标准输出是很有必要的。 我们平常会用到或看到这样的命令: $ ls xxx 1>out.txt 2>&1 $ nohup xxx 2>&1 & 你知道这里1,2含义么? 其实这里的1,2指的就是Unix文件描述符。文件描述符其实就一数字,每一个文件描述符代表的都是一个文件。如果你打开100个文件,你就会获取到100个文件描述符。 这里需要注意的一点就是,在Unix中一切皆文件。当然,这里我们不必去深究,我们需要知道的是1,2代表的是标准输出stdout与标准错误输出stderr。还有0代表标准输入stdin。 在os/exec中就用到了Stdin,Stdout,Stderr,这些基本Unix知识或能帮助我们更好理解这些参数。 os/exec os/exec包内容并不多,我们大概过一下。 LookPath(file string) (string, error) 寻找可执行文件路径,如果你指定的可执行文件在$PATH中,就会返回这个可执行文件的相对/绝对路径;如果你指定的是一个文件路径,他就是去判断文件是否可读取/执行,返回的是一样的路径。 在我们需要使用一些外部命令/可执行文件的时候,我们可以先使用该函数判断一下该命令/可执行文件是否有效。 Command(name string, arg …string) *Cmd 使用你输入的参数,返回Cmd指针,可用于执行Cmd的方法。 这里name就是我们的命令/可执行文件,后面的参数可以一个一个输入。 CommandContext(ctx context.Context, name string, arg …string) *Cmd 和上面功能一样,不过我们可以用上下文做一些超时等控制。 之后几个就是Cmd的一些方法。 (c *Cmd) CombinedOutput() ([]byte, error) 将标准输出,错误输出一起返回; (c *Cmd) Output() ([]byte, error) 输出标准输出,错误从error返回; (c *Cmd) Run() error 执行任务,等待执行完成; (c *Cmd) Start() error, (c *Cmd) Wait() error 前者执行任务,不等待完成,用后者等待,并释放资源; (c *Cmd) StderrPipe() (io....

2019-05-30  ·  Go学习笔记 Go基础  ·  golang

如何用 Go 调用 Windows API

有时候为了更好的兼容Windows, 或者我们为了获得更高级别功能的访问权限(如配置或创建JobObjects或安全令牌等),我们需要直接去调用Windows的系统API。 很幸运,我们可以利用syscall包与系统直接通信,不用用到CGO 。 然而,也有不方便的地方,如大多数的API,我们需要依赖不安全 (unsafe)的内存管理。 这篇文章,主要记录了我在平时开发过程中以及网上收集到的一些关于Windows API调用相关的知识,或者开发模式,方便你遇到类似的情况后,能更快入手。 ...

2019-05-22  ·  Go学习笔记  ·  golang

Mac OS 自动根据 WI-FI 名字改变网络位置

Mac OS 给我们提供了一个 Network Location 的功能,我们可以在不同的 Location 下设置不同的 DNS/VPN 等等。然而每次实际位置变化后,都要我们手动去切换。由于我在公司和家里使用的DNS服务器并不相同,很多时候到公司发现一些公司的内网连接不上了,反复检查 才想起来,哦?位置忘切换了! 我想,能不能根据地理位置改变这个 Location 呢?Google 一圈发现并没有。但是有人提供了另外一种方式。那就是根据 WI-FI 的名字,修改该 Location。一般 WI-FI 名字不会经常改变,所以这也是间接实现该需求了。 ...

2019-04-06  ·  默认 效率提升  ·  mac-os location

关于 Docker 清理

在Docker的日常使用中,我们或许偶尔遇到下面这些情况: $ docker-compose ps [27142] INTERNAL ERROR: cannot create temporary directory! $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 489M 132K 488M 1% /dev tmpfs 497M 0 497M 0% /dev/shm /dev/xvda1 7.8G 7.7G 0 100% / ...

2019-04-05  ·  开发实战总结  ·  docker

MIME Types 速查表

做web开发时,经常需要设置一些返回数据的类型的头部,也就是 MIME Types。 这遍博客就是收罗了大部分的类型, 如果以后发现新的会持续更新。 ...

2019-03-01  ·  开发实战总结  ·  mime-types

Go学习笔记(七) | 理解OAuth 2.0并实现一个客户端

OAuth 2.0是一个关于授权的开放网络标准,主要致力于简化客户端人员开发,同时为Web应用程序、桌面应用程序、移动电话和物联网设备提供特定的授权规范。他的官网在这里。在RFC6749中有明确协议规范。 简单来说,我们平时使用的很多第三方登录并获取头像等信息就是用的OAuth 2.0。如我们用QQ登录一些论坛,用google账号登陆facebook,用github账号登陆gitlab等。如下图展示的就是利用QQ登录网易云音乐Web版,其中用到的就是OAuth 2.0。 ...

2019-02-07  ·  Go学习笔记 Go实战  ·  oauth golang

我又又又把博客迁移了

好久没有维护博客,看了一下Next主题的相关功能,最后决定将博客切到了hexo,原博客在这里。原eiblog有些东西想去更新,一直没有动手,这里立个flag,有空了在eiblog基础上改些东西,大概有: 自动更新disqus js(每次js更新了,disqus就加载不了) 数据库切换到sqlite3 (用gorm支持多种数据库) 侧边栏可以自定义添加页面 更容易部署 ...

2019-02-03  ·  博客折腾日记  ·  hexo next