Golang 之 struct能不能比较

struct能不能比较? 很显然这句话包含了两种情况: 同一个struct的两个实例能不能比较? 两个不同的struct的实例能不能比较? 划重点 在分析上面两个问题前,先跟大家梳理一下golang中,哪些数据类型是可比较的,哪些是不可比较的: 可比较:Integer,Floating-point,String,Boolean,Complex(复数型),Pointer,Channel,Interface,Array 不可比较:Slice,Map,Function 下面就跟大家分别分析一下上面两种...阅读全文

简书 2021-01-18 11:40:14 大叔说码

Golang依赖注入框架wire的使用

Wire wire是google开源的依赖注入框架。 安装 $ go get github.com/google/wire/cmd/wire 上面的命令会在$GOPATH/bin中生成一个可执行程序wire,把$GOPATH/bin加入系统环境变量$PATH中,就可以直接在命令行中执行wire命令。 使用 项目在初始化的时候需要初始化很多依赖,如果相关依赖很多,就可以使用wire。 例如: 使用wire 新建文件wire.go 运行wire命令,则可以生成文件wire_gen.go。 就可以直接...阅读全文

简书 2021-01-18 11:40:14 zfh_51d2

GitHubGameOff 2020作品:Golang实现的月球发射游戏

image.png Game Off是一年一度的游戏活动,参与者在11月期间根据一个秘密主题创造游戏。 2020年的主题是月球发射(MOONSHOT)。 作者基于Golang,使用自己写的游戏引擎,并使用OpenGL作为图库开发了这款游戏。 构建 make build 运行 ./moonshot 目前只在Ubuntu 20.04经过测试。 源码地址:https://github.com/lallassu/moonshot GitHubGameOff 2020活动地址:https://itch.i...阅读全文

简书 2021-01-18 11:39:15 翟志军

一个小时学会用 Go 编写命令行工具

前言最近因为项目需要写了一段时间的Go,相对于Java来说语法简单同时又有着一些Python之类的语法糖,让人大呼”真香“。 但现阶段相对来说还是Python写的多一些,偶尔还得回炉写点Java;自然对Go也谈不上多熟悉。于是便利用周末时间自己做个小项目来加深一些使用经验。于是我便想到了之前利用Java写的一个博客小工具。那段时间正值微博图床大量图片禁止外链,导致许多个人博客中的图片都不能查看。这个工具可以将文章中的图片备份到本地,还能将图片直接替换到其他图床。 我个人现在是一直在使用,通常是在...阅读全文

简书 2021-01-18 11:38:59 半壶雪

01_Linux

1.初始Linux 1.1.操作系统 image.png image.png 1.2.主流的操作系统 image.png 1.3.发展历程 image.png image.png 1.4.什么是Linux image.png 1.5.Linux的特点 image.png 1.6.Linux发行商和常见发行版本 image.png 1.7.CentOS image.png image.png 2.Linux的安装与使用 2.1.VMware简介 image.png image.png 2.2.VM...阅读全文

简书 2021-01-18 11:38:57 广坤丶叔

Go中的SSRF攻防战

来自公众号:新世界杂货铺写在最前面“年年岁岁花相似,岁岁年年人不同”,没有什么是永恒的,很多东西都将成为过去式。比如,我以前在文章中自称“笔者”,细细想来这个称呼还是有一定的距离感,经过一番深思熟虑后,我打算将文章中的自称改为“老许”。关于自称,老许就不扯太远了,下面还是回到本篇的主旨。什么是SSRFSSRF英文全拼为Server Side Request Forgery,翻译为服务端请求伪造。攻击者在未能取得服务器权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。关于内...阅读全文

Segmentfault 2021-01-19 18:32:34 新世界杂货铺

Go基础及语法(一)

var变量, const常量,if判断与for循环,基本数据类型(int, string, bool等)目录Go语言文件基础语法var变量3种变量声明方式:const常量iota实现枚举if判断与for循环判断与多种循环的方法基本数据类型Go语言文件基础语法package main //管理定义模块 import "fmt" //导入模块 /* 主函数 打印Hello,world! */ func main() { fmt.Println("Hello,world!") }var变量3种变量声明...阅读全文

51CTO博客 2021-01-18 09:45:30 mb5ffbc8f4a5a17

ARTS - 21 LeetCode 322 零钱兑换 | 分布式系统经典学习资料

ARTSARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。本周内容Algorithm这周的算法题是 DP 入门题: LeetCode 322 零钱兑换.应该是动态规划最常见的题目之一了, 具体的解题思路可以先从递归的方式来. 即, 假定凑出总额为 i 所需的最少金币数量为 dp[i]. ...阅读全文

Segmentfault 2021-01-19 18:32:33 澎湃哥

通过 xDS 实现 Envoy 动态配置

在云原生时代,容器取代虚拟机成为承载应用工作负载的主要形式。虚拟机生命周期相对较长,可能有数天,但是容器少则几分钟。这就要求负载均衡器必须能适应这种动态性。Envoy 通过 xDS 实现了其动态配置,来应对不断变化的基础架构。xDS 简介Envoy通过文件系统或查询管理服务器发现其各种动态资源。这些发现服务及其相应的API统称为xDS。资源类型xDS API中的每个配置资源都有与之关联的类型。资源类型遵循版本控制方案。目前V2版本已经停止开发,不过会有一年的维护期。V3版本是目前主力版本。支持以...阅读全文

Segmentfault 2021-01-19 18:32:33 iyacontrol

限流-令牌桶实现(go版本)

漏斗算法思想是将所有请求先存到一个桶里。若此刻桶容量没满,表示当前请求是可以访问资源。若满了,则拒绝服务。同时桶会以固定速率取出桶里的请求来处理具体实现方法可以将请求先暂存到一个队列中,若队列已满,则拒绝该请求。同时有一个周期性定时任务来消费队列里的数据从实现可以看出,不管请求有多少或者瞬时流量有多大,请求的处理是固定速率的,所以令牌桶油流量整形的功能相对计数器方法,令牌桶能有效避免抖动的问题,但当瞬时请求量很大时,后续的请求很有可能由于得不到及时处理而超时import ( "context" ...阅读全文

51CTO博客 2021-01-17 19:01:01 mb5ffbc8f4a5a17

浅析go中的类型比较

概述在最近的面试中被面试官问到go之间的类型比较,回答的并不是非常好,根本上来说还是基础不够牢固啊!看了网上的一堆资料,自己做了一些简单的总结,哈哈!go中的类型首先来看看go包含的最基础的集中类型基本类型:go中最基本类型包括整型(int、uint、int8、uint8、int16、uint16、int32、uint32、int64、uint64、byte、rune等)、浮点型(float32、float64)、字符串(string也是个[]rune数组)和比较不常用的复数类型(complex...阅读全文

Segmentfault 2021-01-19 18:32:33 Victoryship

踩坑日志之elasticSearch

前言上周六马上就下班了,正兴高采烈的想着下班吃什么呢!突然QA找到我,说我们的DB与es无法同步数据了,真是令人头皮发秃,好不容易休一天,啊啊啊,难受呀,没办法,还是赶紧找bug吧。下面我就把我这次的bug原因分享给大家,避免踩坑~。bug原因之bulk隐藏错误信息第一时间,我去看了一下错误日志,竟然没有错误日志,很是神奇,既然这样,那我们就DEBUG一下吧,DEBUG之前我先贴一段代码:func (es *UserES) batchAdd(ctx context.Context, user [...阅读全文

Segmentfault 2021-01-19 18:32:32 asong

Go的Pipe应用场景,往服务器提交multipart请求

multipart 请求是多部件请求体,一般来多用于上传文件等场景,由于文件上传,请求体会比较大,就不适合在内存中构建完整的请求体(例如使用bytes.Buffer)。这种情况就可以考虑使用Pipe,它会返回一个Writer和一个Reader,管道流,顾名思义,一头读,一头写。读取磁盘文件,写入网络,并不会缓存在内存中。非常适合这种场景。func Pipe() (*PipeReader, *PipeWriter) { p := &pipe{ wrCh: make(chan []byte), rd...阅读全文

Segmentfault 2021-01-19 18:32:33 KevinBlandy

如何在M1上编译带有CGO的Go项目

之前一直用的公司17年的本子,卡的是在不行。最近入m1 13 inch/16g, 在使用上一直存在一些问题,包括 Chrome 的arm版本也不例外,存在各种卡死的现象。经过Rosetta 2 转译过的代码有明显的卡顿感。最典型的例子就是在goland 中如果使用了非 go1.16-darwin/arm64 版本的go,在写代码的时候不全提示,代码搜索都略卡。但是如果使用了 go1.16 又会导致一些使用了 CGO 的项目无法编译,相信很多小伙伴也遇到了相同的问题。BTW, 由于是吃螃蟹,对于这...阅读全文

51CTO博客 2021-01-17 10:38:03 mb5ffbc8bbd6412

golang 时区问题

golang中需要将int64类型时间戳转当前时间,代码如下func Date(format string, unixTime int64) string { time := time.Unix(unixTime, 0) return time.Format(format) }测试了下,没有问题。但是发现travis-ci中测试代码一直不通过。查询发现,是由于不通时区导致的。修改代码如下func Date(format string, unixTime int64) string { //TOD...阅读全文

Segmentfault 2021-01-19 09:32:33 .container .car 等

基于云原生CloudEvent实现服务目录

基于事件驱动的系统架构在日常的平台开发中早已司空见惯,通过消息队列进行事件的发送,然后分别构建对应的生产者和消费者。不过在传统的业务开发模式不同的事件会有不同的格式,不同的生产者生成出的事件格式也各不相同,消费者能消费的格式也是千差万别,本质上事件、生产者、消费者还是耦合的。那如何解决该问题呢?那就是我们今天要聊的CloudEvent。CloudEvent简介从官网的CloudEvents描述中我们可以看出,CloudEvent本质上就是一个描述事件数据的规范。所以对于CloudEvents的学...阅读全文

Segmentfault 2021-01-19 17:32:35 .container .car 等

golang 写个选择排序

先看选择排序定义。 初始状态:无序区为R[1..n],有序区为空; 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区; n-1趟结束,数组有序化了。 可以不拘小节,不作优化的情况下写出代码。 func selectionSort(arr []int) { f...阅读全文

简书 2021-01-16 23:32:39 追风骚年

golang 写个插入排序

有点上瘾,再来写一个。 从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素移到下一位置; 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; 将新元素插入到该位置后; 重复步骤2~5。 我在写插入排序的时候,一下写了 3 个版本,经测试都是可以使用,只是排序和排序之间越来越像。 func insertionSort(arr []int) { for i := 1; i < len(arr); i++...阅读全文

简书 2021-01-16 23:32:39 追风骚年