2021-02-02. Hello,Go.

一.Go 入门 如下图即为Hello Go 代码: package main import "fmt" func main() { fmt.Println("Hello, 世界") } 第一行的 package main 代表当前的 main.go 文件属于哪个包,其中 package 是 Go 语言声明包的关键字,main 是要声明的包名。在 Go 语言中 main 包是一个特殊的包,代表你的 Go 语言项目是一个可运行的应用程序,而不是一个被其他项目引用的库。 二.环境变量 在 Go 语言中...阅读全文

简书 2021-02-05 14:32:39 我又不乱看

缓存设计的好,服务基本不会倒

本文由『Go开源说』第四期 go-zero 直播内容修改整理而成,视频内容较长,拆分成上下篇,本文内容有所删减和重构。大家好,很高兴来到“GO开源说” 跟大家分享开源项目背后的一些故事、设计思想以及使用方法,今天分享的项目是 go-zero,一个集成了各种工程实践的 web 和 rpc 框架。我是Kevin,go-zero 作者,我的 github id 是 kevwan。go-zero 概览go-zero 虽然是20年8月7号才开源,但是已经经过线上大规模检验了,也是我近20年工程经验的积累,...阅读全文

Segmentfault 2021-02-08 09:32:33 .container .car 等

手撸golang 行为型设计模式 委派模式

手撸golang 行为型设计模式 委派模式缘起最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔记拟采用golang练习之委派模式委派模式(Delegate Pattern)又叫作委托模式,基本作用就是负责任务的调用和分配,是一种特殊的静态代理模式,可以理解为全权代理模式,但是代理模式注重过程,而委派模式注重结果。委派模式有3个参与角色。(1)抽象任务角色(ITask):定义一个抽象接口,它有若干实现类。(2)委派者角色(Delegate):负责在各个具体角色实例之间做出决策,判断并...阅读全文

Segmentfault 2021-02-08 09:32:32 .container .car 等

洗牌算法的golang实现,随便学习几个知识点

洗牌算法的golang实现,随便学习几个知识点 洗牌算法 洗牌我们首先想到的是使用随机数,每次获取一个1-54范围的随机数,直到所有的编号都被分配到,但是这有一个问题,就是随机数的产生可能有大量的重复,或者极端一点,某一个编号一直也获取不到,这样做显然是不合理的。 我们改进一下,从[0, 53]取一个数,去掉之后在剩下的数字中再取,直到取完。这种思想是合理的。但是实现需要加点技巧。直接看代码: func shuffle(arr []int) { rand.Seed(time.Now().Unix...阅读全文

简书 2021-02-05 02:32:39 小刀田田

你真的了解 sync.Mutex吗

【关注公众号】「syd3600520」 回复002 获取Go相关学习资料 Mutex是一个互斥的排他锁,零值Mutex为未上锁状态,Mutex一旦被使用 禁止被拷贝。使用起来也比较简单 package main import "sync" func main() { m := sync.Mutex{} m.Lock() defer m.Unlock() // do something } Mutex有两种操作模式: 正常模式(非公平模式) 阻塞等待的goroutine保存在FIFO的队列中,唤醒...阅读全文

简书 2021-02-05 02:32:39 Leo灬叔叔

Go实战(一)--读取Yaml格式的配置文件

前言在项目中,往往有些属性是不能硬编码到代码中的,例如数据库链接、账号信息等。因此需要我们能在将这些数据写到配置文件中,在项目中读取。本文仅用于记录如何使用yaml.v2 和Viper读取配置文件。代码实战创建结构体编写config.yml,以及对应的结构体config.go,代码如下。app: host: 127.0.0.1 port: 3306 username: admin password: admin log: suffix: log maxSize: 5 package config...阅读全文

51CTO博客 2021-02-04 21:10:09 mb5fcdf38f75bdc

2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 。请问N年后牛的数量是多少 ?

2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 。请问N年后牛的数量是多少 ? 福哥答案2021-02-04: 举例: N=6,第1年1头成熟母牛记为a; 第2年a生了新的小母牛,记为b,总牛数为2; 第3年a生了新的小母牛,记为c,总数为3; 第4年a生了新牛d,总数4; 第5年b成熟了,ab分别生了一只,总数为6; 第6年c也成熟了,abc分别生了一只,总数为9,故返回9. 递...阅读全文

简书 2021-02-04 22:32:41 福大大架构师每日一题

Golang 中 nil==nil 是对是错?

这篇文章,我们将了解如何在 Go 中使用 == 操作符比较对象值。我们还将进一步研究某些场景下,该操作符的行为看起来像是一个错误,可实际是因为缺乏理解导致的。看看下面的例子。var a *string = nil var b interface{} = a fmt.Println("a == nil:", a == nil) // true fmt.Println("b == nil:", b == nil) // false fmt.Println("a == b:", a == b ) //...阅读全文

Segmentfault 2021-02-07 23:32:33 .container .car 等

致敬经典,golang版的dsinff-webspy

相传很久以前,有一套经典的sniff工具集叫dsniff,其中有一个经典的webspy,可以在本地浏览器中实时地展示被嗅探的服务器所发送的http请求。为了致敬经典,我也从前2天写的那个恶意流量分析程序 xsec-traffic中抽离出一些代码,山寨了这个功能,以小无相功强行催动这套从天而降的掌法。项目地址:netxfly/xsec-webspy用法./xsec_webspy NAME: xsec webspy - xsec webspy, Support local and arp spoof...阅读全文

51CTO博客 2021-02-04 20:17:16 mb5fcdf35dba419

redis批量弱口令扫描及get root的poc[go语言版]

前些时间通过redis的弱口令拿服务器root权限的漏洞火了,一直没时间关注,今天下午难得有时间就出个批量利用的poc,效果见题图。请勿用于非法用途,just for fun。依赖包安装:go get gopkg.in/redis.v3const rsa_key常量为你的cat ~/.ssh/id_rsa.pub的内容,生成方式如下:完整代码:package mainimport ( "bufio" "bytes" "fmt" "gopkg.in/redis.v3" "log" "os" "ru...阅读全文

51CTO博客 2021-02-04 20:29:36 mb5fcdf35dba419

用go语言给lua/openresty写扩展

背景最近的一个lua项目中需要解析wbxml,WBXML是XML的二进制表示形式,Exchange与手机端之间的通讯采用的就是该协议,我需要解析到手机端提交过来的数据,以提高用户体验。但是lua没有现成的Wbxml解析库,从头撸一个势必要花费大量造轮子的时间,在网上查找了半天,发现有一个go语言版本的https://github.com/magicmonty/activesync-go,写了几行测试代码,确认该库可以正常解析出Exchange的wbxml数据内容,如下所示:微服务 VS lua ...阅读全文

51CTO博客 2021-02-04 20:05:26 mb5fcdf35dba419

手撸golang 结构型设计模式 适配器模式

手撸golang 结构型设计模式 适配器模式 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 本系列笔记拟采用golang练习之 适配器模式 适配器模式(Adapter Pattern)又叫作变压器模式,它的功能是将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作,属于结构型设计模式。 _ 场景 某智能家居应用, 可接入并显示温度计信息 系统设计的温度计接口, 采用的是摄氏度单位 现按客户需求, 要接入某进口款温度计, 厂家...阅读全文

golang中的闭包

go语言中函数可以作为返回值,可以作为参数,可以作为右值绑定到变量,golan把这些返回值,参数,或变量称为function value,函数指令在编译期间生成,而function value本质上是一个指针,指向一个runtime.funcval结构体,这个结构体里面只有一个地址——函数指令的入口地址。假设有如下代码: func A(i int){ i++ fmt.Println(i) } func B(){ f1:= A f1(1) } func C(){ f2:=A f2(1) } f1和...阅读全文

简书 2021-02-04 18:33:11 小刀田田

手撸golang 结构型设计模式 桥接模式

手撸golang 结构型设计模式 桥接模式 缘起 最近复习设计模式 拜读谭勇德的<<设计模式就该这样学>> 本系列笔记拟采用golang练习之 桥接模式 桥接模式(Bridge Pattern)又叫作桥梁模式、接口(Interface)模式或柄体(Handle and Body)模式,指将抽象部分与具体实现部分分离,使它们都可以独立地变化,属于结构型设计模式。 桥接模式适用于以下几种业务场景。 (1)在抽象和具体实现之间需要增加更多灵活性的场景。 (2)一个类存在两个(或多个)独立变化的维度,而...阅读全文

手撸golang 结构型设计模式 桥接模式

手撸golang 结构型设计模式 桥接模式缘起最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔记拟采用golang练习之桥接模式桥接模式(Bridge Pattern)又叫作桥梁模式、接口(Interface)模式或柄体(Handle and Body)模式,指将抽象部分与具体实现部分分离,使它们都可以独立地变化,属于结构型设计模式。桥接模式适用于以下几种业务场景。(1)在抽象和具体实现之间需要增加更多灵活性的场景。(2)一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维...阅读全文

Segmentfault 2021-02-07 22:32:33 .container .car 等

Go 每日一库之 go-carbon,优雅的golang日期时间处理库

carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,支持链式调用和 gorm、xorm、zorm 等主流 orm。 github:[github.com/golang-module/carbon](https://github.com/golang-module/carbon "github.com/golang-module/carbon") gitee:[gitee.com/go-package/carbon](https://gitee.com/go-...阅读全文

Go语言中文网 2021-02-04 16:40:16 gouguoyin

operator-sdk demo 试一试

operator-sdk demo参考文档Golang Based Operator Tutorial构建一个 demo project前提安装 operator-sdk operator-sdk release有一个可访问的 v1.11.3+ 版本的 kubernetes 集群(若使用 apiextensions.k8s.io/v1 CRDs,需 v1.16.0+)以 admin 身份访问 kubernetes 集群初始化项目env:$ operator-sdk version operato...阅读全文

Segmentfault 2021-02-07 16:32:34 .container .car 等

记一次goroutine泄漏的问题

Golang因为有着比线程更加轻量级的协程的出现,使得并发编程的上手难度一下子变得亲民起来。而channel的引入,使得goroutine之间的通信变得异常的便捷。但好用并不意味着毫无风险,go channel使用不当,也极易引起goroutine泄漏。何谓goroutine泄漏?就是开启了goroutine,却并没有及时回收,导致goroutine越积越多,如果程序及时关闭还不会出现问题,如果是在服务器中,程序长期运行,就会导致资源占用十分恐怖。虽然goroutine比线程更轻量级,但每个go...阅读全文

Segmentfault 2021-02-07 17:32:36 .container .car 等