go-zero之web框架
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,其中rest是web框架模块,基于Go语言原生的http包进行构建,是一个轻量的,高性能的,功能完整的,简单易用的web框架
服务创建
go-zero中创建http服务非常简单,官方推荐使用goctl工具来生成。为了方便演示,这里通过手动创建服务,代码如下
package main
import (
" ...
适合 Go 新手学习的开源项目——在 GitHub 学编程
作者:HelloGitHub-小鱼干&卤蛋
故事要从 2007 年说起。因为受够了 C++ 煎熬的 Google 首席软件工程师 Rob Pike 召集 Robert Griesemer 和 Ken Thompson 两位牛人,决定创造一种新语言来取代 C++,这就是 Go 的由来。
在 2009 年 11 月 10 日 Google 正式发行 Go 这一编程语言。Go 从 C 语言继承了相似的表达式语法、控制 ...
01 . Go语言实现SSH远程终端及WebSocket
Crypto/ssh简介
使用
下载
go get "github.com/mitchellh/go-homedir"
go get "golang.org/x/crypto/ssh"
使用密码认证连接
连接包含了认证,可以使用password或者sshkey 两种方式认证,下面采用密码认证方式完成连接
Example
package main
import (
"fmt"
"golang.org/x/crypto/ssh"
"log"
"time"
)
func main() ...
深入理解Go语言(07):内存分配原理
一、Linux系统内存
在说明golang内存分配之前,先了解下Linux系统内存相关的基础知识,有助于理解golang内存分配原理。
1.1 虚拟内存技术
在早期内存管理中,如果程序太大,超过了空闲内存容量,就没有办法把全部程序装入到内存,这时怎么办? 在许多年前,人们采用了一种叫做覆盖技术,这样一种解决方案。
这是一种什么样 ...
Go语言中的互斥锁和读写锁(Mutex和RWMutex)
目录一、Mutex(互斥锁)不加锁示例加锁示例二、RWMutex(读写锁)并发读示例并发读写示例三、死锁场景Lock/Unlock不是成对出现锁被拷贝使用循环等待
虽然Go语言提供channel来保证协程的通信,但是某些场景用锁来显示保证协程的安全更清晰易懂。
Go语言中主要有两种锁,互斥锁Mutex和读写锁RWMutex,下面分别介绍一下使用方 ...
Go select的使用和实现原理
一、select简介
1.Go的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的;当select中没有case语句的时候,会阻塞当前groutine。
2.select是Golang在语言层面提供的I/O多路复用的机制,其专门用来检测多个channel是否准备完毕:可读或可写。
3.select语句中除default外,每个case操作 ...
go cobra实例讲解
概述
cobra 库是 golang 的一个开源第三方库,能够快速便捷的建立命令行应用程序。
优势:cobra 可以快速建立CLI程序,使我们更专注于命令需要处理的具体的业务逻辑。
举两个例子:
hugo server --port=1313
git clone URL --bare
都是命令行程序。
基本概念
cobra由三部分构成:commands,arguments 和 flags
commands: ...
Go之NSQ简介,原理和使用
NSQ简介
NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。
NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。它具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征
适合小型项目使用,用来学习消息 ...
Go 包管理历史以及 Go mod 使用
之前也写过 Go 管理依赖工具 godep 的使用,当时看 godep 使用起来还是挺方便,其原因主要在于有总比没有强。关于依赖管理工具其实还是想从头聊聊这个需求以及大家做这个功能的各种出发点。
GOPATH 和 GOROOT
GOROOT 这个变量的作用就是为了告诉当前运行的 Go 进程当前 Go 安装在哪里,当你想要运行的时候去哪里找 Go SDK相 ...
GO连接MySQL
Go语言没有提供官方的数据库驱动,所以要安装第三方函数库。
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() { //数据库连接
db,_:=sql.Open("mysql","root:root@(127.0.0.1:3306)/golang")
err :=db.Ping()
if err != nil{
f ...
Go 安装教程
一、在 Windows 上安装 Go 环境
首先在 Go 官网 下载 Windows 系统下的一键安装包。
然后双击打开该文件,一直点 Next 就行。
注意这里默认是安装到 C 盘,建议不要修改,因为环境变量会自动设置,如果安装到其他盘,那么可能需要手动修改所有环境变量的值。
二、查看环境变量
打开控制面板,点击用户账户:
再点击 ...
Go 并发操作
goroutine
在其他的编程语言中,线程调度是交由os来进行处理的。
但是在Go语言中,会对此做一层封装,Go语言中的并发由goroutine来实现,它类似于用户态的线程,更类似于其他语言中的协程。它是交由Go语言中的runtime运行时来进行调度处理,这使得Go语言中的并发性能非常之高。
一个Go进程,可以启动多个gor ...
如何在 IIS 上部署 Go API?
问题场景
我这边原先的技术栈主要是 .NET(Core), 所以服务器基本上都是 Windows Server + IIS.
这次有个 API 服务用 Go 重写, 但是部署有点不美, 直接执行黑框框不好看, 也容易丢, 做成服务又不方便更新维护, 想着能不能继续挂载在 IIS 下.
于是乎...
首先想到的是 IIS 下有个 FastCGI 支持, 以前还在 IIS 下部署过 PHP 项 ...
如何使用client-go访问k8s CRD
1. 写在前面
微信公众号:[double12gzh]
个人主页: https://gzh.readthedocs.io
关注容器技术、关注Kubernetes。问题或建议,请公众号留言。
Kubernetes架构的设计模式,我们可以很方便的使用CRD(Custom Resource Definitions)对k8s API进行扩展。但是问题,通过client-go来获取这些CRD或开发用户自定义控制器,那是比较 ...
gRPC-go 入门(1):Hello World
摘要
在这篇文章中,主要是跟你介绍一下gRPC这个东西。
然后,我会创建一个简单的练习项目,作为gRPC的Hello World项目。
在这个项目中,只有很简单的一个RPC函数,用于说明gRPC的工作方式。
此外,我也会跟你分享一下我初次接触gRPC所遇到的一些坑,主要是在protocol buffer的proto-gen-go插件上面。
1. 简单介绍
在这一节 ...
部署Go语言程序的N种方式
部署Go语言项目
本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法。
独立部署
Go 语言支持跨平台交叉编译,也就是说我们可以在 Windows 或 Mac 平台下编写代码,并且将代码编译成能够在 Linux amd64 服务器上运行的程序。
对于简单的项目,通常我们只需要将编译后的二进制文件拷贝到服务 ...
go 环境使用 go mod
最近接触到go mod,网上查了查资料,这里记录一下。
1 介绍
1.1、go mod是什么
go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。
之前Golang 主要依靠vendor和GOPATH来管理依赖库,ven ...
漏桶、令牌桶限流的Go语言实现
本文首发于我的个人博客:liwenzhou.com,更多更详细的Go语言项目实战内容就在liwenzhou.com。
限流
限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。
我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为8万人;沙河地铁站早高峰通过站外排队逐一放行的方式限制同一时间进入车站 ...
go switch的用法
最近一直在写go, switch说实话用的不算多。但是今天用了下发现go的switch可真不太一样啊。
无需break
func main() {
i := 0
switch i {
case 0:
fmt.Println("0000000000")
fmt.Println("0")
case 1:
fmt.Println("1111111111")
fmt.Println("1")
case 2:
fmt.Println("2222222222") ...
Go中sync.map使用小结
sync.map
前言
深入了解下
查看下具体的实现
Load
Store
Delete
LoadOrStore
总结
流程图片
参考
sync.map
前言
Go中的map不是并发安全的,在Go1.9之后,引入了sync.Map,并发安全的map。
深入了解下
对于map,我们常用的做法就是加锁。
对于sync.Map这些操作则是不需要的,来看下sync.Map的特点:
1、以空间换效率 ...