Home Menu Go 语言 for 和 range 的实现 17 Mar 2019 for range 循环 Golang Go实现原理 概述 永不停止的循环 神奇的指针 遍历清空数组 随机的遍历顺序 经典循环 范围循环 数组和切片 哈希 字符串 通道 总结 Reference 循环是几乎所有编程语言都具有的控制结构,也是编程语言中常用的控制结构,Go 语言除了使用经典的『三段式』循环之外,还引入了另一个关键字 range 帮助我们快速遍历数组、哈希表以及 Channel 等元素。 在这一节...
-
Go 语言 for 和 range 的实现
-
Golang 之于 DevOps 开发的利与弊(六部曲之一):Goroutines, Channels, Panics, 和 Errors
![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go_devops/1.png) 对于你的下一个 DevOps 应用来说,Google 公司的 Go 可能是完美的语言。作为由 6 篇组成一个系列文章的第一篇,我们从 goroutines、panics 和 errors 开始深入研究 Go 语言的利与弊,因为这些利与弊涉及构建 DevOps 应用。 在这篇博客中,我们已经称赞了 Google 公司...
-
Golang 中的微服务-第 4 部分-使用 JWT 做认证
在之前的文章里,我们创建了一个用户服务,保存了一些用户。现在我们看下如何在用户服务中安全的保存用户密码,同时,通过微服务写几个功能,来验证用户,发布安全令牌。 注意,我现在已经把我们的服务拆分到几个不同的仓库里。 我觉得这样部署起来容易些。 最开始我打算做成一个单独的仓库,但是发现用 Go 的 dep 管理有点麻烦,有很多冲突。我也会说明下如何独立地运行和测试微服务。 遗憾的是,用这种方法我们就不能用 docker-compose 了。 不过目前用起来还不错。如果你在这方面有什么建议...
-
Goroutine浅析
CSAPP ch12总结了三种并发模型:基于进程,基于IO多路复用,基于线程。在实际的服务器应用中基于线程的并发模型并不能创建和使用过多的thread。因为thread数目过多于CPU核数,内核调度和切换thread将付出较大代价。因此通常在基于线程的基础上,在用户态设计用户态线程模型与调度器,使得调度不需要陷入内核完成,减小并发调度代价。 调度器的设计与演化用户态线程模型又根据多少个协程对应OS内核线程区分为1:1 M:1 M:N 三种。go在runtime层实现的是M:N的用户态线程+调度器...
-
Golang心得
先大概说下为什么用 Golang。我是一个对语言有洁癖的人,曾经是一个C+Python 的坚定呐喊者,最常说的一句话就是,只要熟练这两种,什么情况都能应付,根本不用 Java 和 C++(纯指我所在的领域)。核心代码用C,速度快,需要记的语言细节少;外围用 Python glue,灵活,简洁,任何模块都容易上手,绝配。Java 的繁琐,C++ 的无数无用的特性,都让我只在不得不用的时候才去用。Objective-C 是另一个我欣赏的语言,问题是不跨平台,过于封闭。 可惜的是,在这个节奏极快的时代...
-
Go 语言的优点,缺点和令人厌恶的设计
这是关于 「[Go是一门设计糟糕的编程语言 (Go is not good)](https://github.com/ksimka/go-is-not-good)」 系列的另一篇文章。Go 确实有一些很棒的特性,所以我在这篇文章中展示了它的优点。但是总体而言,当超过 API 或者网络服务器(这也是它的设计所在)的范畴,用 Go 处理商业领域的逻辑时,我感觉它用起来麻烦而且痛苦。就算在网络编程方面,Go 的设计和实现也存在诸多问题,这使它看上去简单实际则暗藏危险。 写这篇文章的动机是因为我最...
-
Gin实践 连载二 搭建Blog API's(一)
Gin搭建Blog API's (一) 介绍和初始化项目 初始工作区 首先,我们需要增加一个工作区(GOPATH)路径用于我们的Blog项目。 将你新的工作区加入到/etc/profile中的GOPATH环境变量中, 并在新工作区中,建立bin、pkg、src三个目录。 在src目录下创建gin-blog目录,初始的目录结构: $GOPATH ├── bin ├── pkg └── src └── gin-blog 初始化项目目录 gin-blog/ ├── conf ├── middlewar...
-
Gin实践 连载三 搭建Blog API's(二)
编写Tag的API's、Models 本大节将会涉及到以下知识点: gin:Golang的一个微框架,性能极佳 beego-validation:本节采用的beego的表单验证库,中文文档 gorm,对开发人员友好的ORM框架,英文文档 com,工具包 业务逻辑的编写 我们开始编写业务代码,博客文章会有标签的概念, 定义接口 本节正是编写标签的逻辑,我们想一想,一般接口为增删改查是基础的,那么我们定义一下接口吧! 获取标签列表:GET("/tags") 新建标签:POST("/tags") 更新...
-
Gin实践 连载四 搭建Blog API's(三)
编写Article的API's、Models 定义接口 本节编写文章的逻辑,我们定义一下接口吧! 获取文章列表:GET("/articles") 获取指定文章:POST("/articles/:id") 新建文章:POST("/articles") 更新指定文章:PUT("/articles/:id") 删除指定文章:DELETE("/articles/:id") 编写路由逻辑 在routers的v1版本下,新建article.go文件,写入内容: package v1 import ( "gi...
-
Gin实践 连载五 搭建Blog API's(四)
API's - JSON Web Tokens (JWT) 在前面几节中,我们已经基本的完成了API's的编写 但是,还存在一些非常严重的问题,例如,我们现在的API是可以随意调用的,这显然还不够完美,是有问题的 那么我们采用 jwt-go (GoDoc)的方式来简单解决这个问题 下载依赖包 首先,我们下载jwt-go的依赖包 go get -u github.com/dgrijalva/jwt-go 编写jwt工具包 我们需要编写一个jwt的工具包,我们在pkg下的util目录新建jwt.go...