Go语言的omitempty
使用
熟悉 Golang 的朋友对于 tag、json 和 struct 都不陌生。
type Address struct {
City string `json:"city"`
Street string `json:"street"`
ZipCode string `json:"zip_code"`
}
func TestMarshal(t *testing.T) {
data := `{
"city": "Beijing",
"street": "a"
}`
addr := &Address{}
...
也许是最客观、全面的比较 Rust 与 Go:都想把 Rust 也学一下
最近一年,将 Rust 和 Go 进行比较的不少,但不少都不公正,带感情色彩。而这篇文章客观、全面的分析对比了 Rust 和 Go,让你具体项目时选择最合适的。
Rust 还是 Go,哪个更好?你应该为下一个项目选择哪种语言,为什么?两者在性能,简单性,安全性,功能,规模和并发性等方面如何比较?它们有什么共同点,并且在根本 ...
Golang go-linq使用说明
日常开发过程中需要对切换进行一些简单的检索、计算等,暂时golang没有泛型。基于减少代码的目的go-linq是一个不错的扩展,以下是一些简单的使用说明
如有不全的,请参考官方的文档地址
Git地址:https://github.com/ahmetb/go-linq
文档地址 :https://godoc.org/github.com/ahmetb/go-linq
一、需要引入的包
linq "github ...
Go 进程诊断工具 gops
本文转自
在类 Unix 系统中,我们常常会使用 ps 命令来查看系统当前所运行的进程信息,该命令为我们提供了较大的帮助,能够快速的定位到某些进程的运行情况和状态。
而在 Go 语言中,也有类似的命令工具,那就是 gops[1](Go Process Status)。
gops 是由 Google 官方出品的一个命令行工具,与 ps 命令的功能类似,能够查 ...
go中开启 go module
如果不设置,直接使用命令创建会报错,如下:
go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help mod
01、配置GO111MODULE=on环境变量:配置后,最好是重启一下电脑,以免没有生效,搞得自己很烦。
02、使用命令:go mod init
...
go 使用go-redis 和redigo 连接redis
package main
import (
"context"
"fmt"
"log"
"math/rand"
"net/http"
"sync"
"time"
goredis "github.com/garyburd/redigo/redis"
redis "github.com/go-redis/redis/v8"
)
var ctx = context.Background()
var redisdb *redis.Client
var once sync.Once
var pool *goredis.Poo ...
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连接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. 简单介绍
在这一节 ...