202002-28 Go的http包中默认路由匹配规则 HOT 路由规则的查找就是从ServeMux中的map去匹配查找的,到这个handler并执行,只是会有一些处理机制,比如怎么样确保访问/path/subpath的时候是先匹配/path/subpath而不是匹配/path/呢? 继续阅读 >
202002-27 关于go get的小知识 可能有同学在刚使用go get的时候会有一个小疑问,就是有些包go get下来的时候,有些包会“下载”一个二进制包在GOPATH/bin目录下,有些又没有。其实这是因为go get这个命令会分两步走,一个是下载源码包,一个是执行go install。所以有些包里面有main包的时候,下载完源码包就可以被go install编译放在GOPATH/bin目录下。来看个小例子。 继续阅读 >
202002-27 Gong服务实现平滑重启分析 HOT 平滑重启是指能让我们的程序在重启的过程不中断服务,新老进程无缝衔接,实现零停机时间(Zero-Downtime)部署; 平滑重启是建立在优雅退出的基础之上的,之前一篇文章介绍了相关实现:Golang中使用Shutdown特性对http服务进行优雅退出使用总结 继续阅读 >
202002-27 Go语言_反射篇 HOT 这里的GO使用的版本是1.2 Go语言的基本语法的使用已经在前几篇陆陆续续学完了,下面可能想写一些Go的标准库的使用了。 先是reflect库。 继续阅读 >
202002-26 Go语言之禅 HOT 我最近一直在思考很多事情,每当反思自己的工作成果时,眼前常会出现一行字幕:我该如何编写出好代码? 主观上,没人愿意去编写糟糕的代码,那么问题来了:你是怎么知道你编写出好的Go代码了呢? 如果好与坏之间存在连续性,那么我们怎么知道哪些是好的部分?它的特性、属性、标志、模式和惯用法又是什么呢? 继续阅读 >
202002-25 go语言模版编程 HOT 模板是将一个事物的结构规律予以固定化、标准化的成果,它体现的是结构形式的标准化。对于我们程序员来说,更直白的理解是;对于要输出的内容,个人位置需要参数化填充,需要填充的参数位置是固定的,输出的内容是有统一标准的。就像是我们小时候做的填空题,题目固定,有固定的位置需要填充,模版就是原理。 继续阅读 >
202002-25 go语言打造个人博客系统(二) HOT 以上就是博客系统后端接口的全部内容,再搭配上一套好看的前端界面就可以使用啦。亲自写过golang代码,才会真正的体会到go语言的优点,快来学习吧。 继续阅读 >
202002-24 Go的标准项目布局 这是Go应用程序项目的基本布局。它不是核心Go开发团队定义的官方标准;然而,它是Go生态系统 中一组常见的历史和新兴项目布局模式。其中一些模式比其他模式更受欢迎。它还有许多小的增强 功能,以及任何足够大的真实世界应用程序共有的几个支持目录。 如果您正在尝试学习Go或者您正在为自己构建PoC或不成熟的项目,那么这个项目布局是一种过度 杀伤力。从一些非常简单的东西开始(单个main.go文件绰绰有余)。随着项目的增长,请记住, 确保代码结构良好非常重要,否则终会出现带有大量隐藏依赖项和全局状态的混乱代码。 继续阅读 >
202002-24 go语言打造个人博客系统(一) HOT 首选考虑数据存储,写好的博客需要存储起来,那么首先要有个数据库了,在这里我们选择MongoDB数据库,说到MongoDB,它的介绍很有意思,MongoDB是使用C++开发的一种分布式数据库,它是非关系型数据库中当中最像关系型的。使用MongoDB是因为它有一个document的概念,数据以文档的形式存储,当然也是key-value格式的。基于这样我们需要安装一个数据库,在linux平台安装非常简单。 继续阅读 >
202002-24 Go项目实战:用 Go 语言构建 SQL 解析器 HOT 本文旨在对如何用 Go 语言构建 LL(1) 文法的解析器[1] ——此例用来解析 SQL 请求——作出简要的介绍。只需要读者具有极少的编程能力(函数、结构体、条件语句和 for 循环)。 继续阅读 >
202002-22 Go语言学习:字符串 在Go中字符串作为内建类型,和C语言是不一样的。C中没有字符串类型, 所有需要通过字符数组来表示字符串,并以指针来传递。 在Go中字符串是一个定长字符数组,所以当其创建之后就无法直接改变了。 继续阅读 >
202002-22 流程控制结构 HOT 虽然Go是类C的语言,但Go在这些流程控制语句中的条件表达式部分不使用括号。甚至有些时候使用括号会报错,但有些复杂的条件判断需要使用括号改变优先级。 继续阅读 >
202002-22 Go语言开发环境搭建详细教程 HOT 在《高效能人士的七个习惯》一书中有这么一句话“学而不做等于没学,知而不做等于无知”,所以学习一门新语言光看是不行的,必须身体力行才可以,如果不实践的话最终也只是无知的状态。对于学习语言来说,“做”对应的是编码、调试、运行等,在进行这些工作之前,我们必须安装好编码和调试用的编辑器,运行所需的环境等,这篇文章便是和大家介绍关于go语言开发的环境搭建。 继续阅读 >
202002-21 接口类型断言和type-switch HOT 接口实例中可以存放各种实现了接口的类型实例,在有需要的时候,还可以通过ins.(Type)或ins.(*Type)的方式将接口实例ins直接转回Type类型的实例。 继续阅读 >
202002-21 Go Web:自带的ServeMux multiplexer HOT 自带的默认的DefaultServeMux其实功能限制很大。比如请求的URL路径为"/images/123.png",想要匹配这个确实容易,但是想要取出其中的"123.png"字符串,DefaultServeMux就没法实现。 有一个非常强大的Gorilla工具包(www.gorillatoolkit.org),它有好几个功能,其中一个功能是提供multiplexer。 继续阅读 >
202002-21 Tips:如何优雅的使用GDB调试Go AppArmor 是一个 Linux 内核安全模块,可用于限制主机操作系统上运行的进程的功能。每个进程都可以拥有自己的安全配置文件。安全配置文件用来允许或禁止特定功能,例如网络访问或文件读/写/执行权限。 继续阅读 >
202002-20 Go语言入门:map和指针 HOT Go作者之一是Thompson,他发明了后来衍生出C语言的B程序语言,作为鼻祖,设计的新语言指针必须有。Go里的指针和C的指针语法使用上基本一样,区别是Go里不能对指针进行算术运算。 继续阅读 >
202002-19 详解数据类型:数组与切片 HOT 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。 继续阅读 >
202002-19 深挖 Go 之 for-range 排坑指南 HOT golang 常用的遍历方式,有两种:for 和 for-range。而 for-range 使用中有些坑常会遇到,今天我们一起来捋一捋。 继续阅读 >
202002-18 Go 字符串格式化 twelve-factor应用提倡将配置存储在环境变量中。任何从开发环境切换到生产环境时需要修改的东西都从代码抽取到环境变量里。 但是在实际开发中,如果同一台机器运行多个项目,设置环境变量容易冲突,不实用。godotenv库从.env文件中读取配置, 继续阅读 >
202002-18 Go语言指针详解,看这一篇文章就够了 HOT 与 Java 和 .NET 等编程语言不同,Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。 继续阅读 >