Go语言中文网 为您找到相关结果 357

常用缓存技巧

简介 在项目中,大家经常会遇到处理高并发的情况,缓存是应对高并发的有效手段之一。这篇文章简单介绍一下常用的缓存手段。当然,使用缓存有一个前提:数据不是实时变更的。方法一、CDNCDN一般用来做静态资源的缓存,但是稍微进行修改,便可以用来缓存动态接口的返回。当请求资源在CDN不存在时,请求会到回源机上,在回源机的Nginx上,根据路由规则,将请求转发到不同服务,返回结果会存在到CDN上。如下图所示: Nginx实现upstreamfs.com_backend {server127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=10s;check interval=3000 rise=3 fall=3 timeout=1000 type=tcp def...阅读全文

博文 2020-05-30 21:32:51 shidawuhen

Go语言版本区块链.第一部分:简单原型

简介:区块链是21世纪最具革命性的技术之一,此项技术依然在发展当中,它的潜力尚未被完全发掘。本质上,区块链仅仅是一个分布式的数据库。但是区块链的独特之处在于它不是一个私有的数据库,而是一个公有的数据库。例如:使用它的人(节点),保存一个它的完全副本或者至少部分副本。并且,一个新的纪录被加入到区块链需要其他节点达成共识。另外区块链使得加密货币和智能合约成为可能。在系列文章中,我将基于区块链实现一个的简单的加密货币。 比特币 区块:让我们先从区块链中“区块"的概念入手。在区块链中区块是用来存储有价值的信息的。例如:比特币的区块存储交易,这也是所有加密货币的本质。除此以外,一个区块还包含一些诸如版本号,当前时间戳以及前一个区块的哈希值等技术信息。在这篇文章中,我们不打算实现区块链中或者比特币中所描...阅读全文

博文 2018-10-31 16:34:57 舞动的字节

从一道面试题看golang slice

之前遇到一道感觉很不错的slice面试题,这里分享出来,先不贴答案了大家可以先思考下每个地方的打印会是什么;最后再给大家公布答案 v := make([]int, 0, 5) v = append(v, 2, 3, 5) a := append(v, 0, -1) fmt.Println(v) fmt.Println(a) b := append(v, 1) fmt.Println() fmt.Println(v) fmt.Println(a) fmt.Println(b) c := append(v, 6, 7, 8, 9) fmt.Println() fmt.Println(v) fmt.Println(a) fmt.Println(b) fmt.Println(c) d := appe...阅读全文

盘点php合并数组的方式

1、arrary_merge示例代码: $arr1= array(1, 2, 3, 4, 5); $arr2= array(1, 2, 6, 7, 8, 9, 10); $result1= array_merge($arr1, $arr2); $arr3= array("name"=> "itbsl", "age"=> 13, "sex"=> "Male"); $arr4= array("name"=> "火龙果", "age"=> 13, "sex"=> "Male"); $result2= array_merge($arr3, $arr4); echo"

"; var_dump($result1); var_dump($result2); 运行上面的代码,输出结果如下图所示: 普...阅读全文

博文 2019-08-27 19:32:48 爱喝马黛茶的安东尼

gf框架之分页模块(二) - 动态分页

文章来源:http://gf.johng.cn/597432 动态分页是通过GET参数(通过QueryString)传递分页参数,默认分页参数为page。 示例如下: package main import ( "gitee.com/johng/gf/g/os/gview" "gitee.com/johng/gf/g/net/ghttp" "gitee.com/johng/gf/g/util/gpage" ) func main() { s := ghttp.GetServer() s.BindHandler("/page/demo", func(r *ghttp.Request) { page := gpage.New(100, 10, r.Get("page"), r.URL.Strin...阅读全文

博文 2018-05-21 12:34:37 John

一篇文章读懂阿里云负载均衡性能保障型实例

什么是负载均衡性能保障型实例? 性能保障型实例提供了可保障的性能指标(性能SLA)。与之相对的是性能共享型实例,即不保障实例的性能指标,资源是所有实例共享的。 在阿里云负载均衡推出性能保障型实例之前,用户所有购买的实例均为性能共享型实例。在控制台上,可以查看已购实例的类型。 把鼠标移至性能保障型实例的绿色图标,可查看具体的性能指标,如下图所示。 实例类型 性能保障型实例的三个关键指标如下: 最大连接数-Max Connection 最大连接数定义了一个负载均衡实例能够承载的最大连接数量。当实例上的连接超过规格定义的最大连接数时,新建连接请求将被丢弃。 每秒新建连接数-Connection Per Second (CPS) 每秒新建连接数定义了...阅读全文

Go接口之nil != nil

本文来自“灰子学技术”,原文链接如下所示:https://mp.weixin.qq.com/s/ZBd1UcIJFk_DonkxVNgERA一、引出话题:在开始这个话题之前,我们先看一段代码以及其输出结果,代码如下所示: Output: 从上面的输出结果来看,GetA()返回的类型为*A就算赋值为nil,也不等于nil。看到这里笔者觉得很奇怪,明明是GetA()返回值是nil,为什么nil的判断条件是false呢?二、原因分析:在研究了interface之后,笔者发现了真相,原来Go语言中的interface是不是nil的条件,不单单是interface中的值是nil,类型还需要是nil才行。通过Go的官方文档描述来看,原因如下:// 原文链接:https://golang.org/doc/...阅读全文

GO语言学习笔记6-Sort的使用

GoLang标准库的sort包提供了排序切片和用户自定义数据集以及相关功能的函数。 Sort操作的对象通常是一个slice,需要满足三个基本的接口,并且能够使用整数来索引。 1.sort实现原理 Sort排序的函数原型如下所示: (1)Sort // It makes one call to data.Len to determine n, and O(n*log(n)) calls to // data.Less and data.Swap. The sort is not guaranteed to be stable. func Sort(data Interface) { n := data.Len() quickSort(data, 0, n, maxDepth(n)) } (2)...阅读全文

Serverless 衔接 Kafka 上下游数据流转实战

腾讯云 CKafka 作为大数据架构中的关键组件,起到了数据聚合,流量削峰,消息管道的作用。在 CKafka 上下游中的数据流转中有各种优秀的开源解决方案。如 Logstash,File Beats,Spark,Flink 等等。本文将带来一种新的解决方案:Serverless Function。其在学习成本,维护成本,扩缩容能力等方面相对已有开源方案将有优异的表现。 作者简介:许文强,腾讯云 Ckafka 核心研发,精通 Kafka 及其周边生态。对 Serverless,消息队列等领域有较深的理解。专注于 Kafka 在公有云多租户和大规模集群场景下的性能分析和优化、及云上消息队列 serverless 化的相关探索。 Tencent Cloud Kafka 介绍 Tencent Clo...阅读全文

博文 2020-09-07 12:34:18 腾讯云Serverless

Go http2 和 h2c

了解一下http2和h2c (HTTP/2 over TCP,HTTP/2 without TLS)。 http/1.1 的服务器 我们经常会在代码中启动一个http服务器,最简单的http/1.1服务器如下所示: http.Handle("/foo", fooHandler) http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) }) log.Fatal(http.ListenAndServe(":8080", nil)) 使用Go开发web服务非常的简单,快速。 http/1.1 的服...阅读全文

博文 2020-02-21 11:20:26 gao88

golang-101-hacks(19)——switch

注:本文是对golang-101-hacks中文翻译。 和其他编程语言(例如C)相比,Go语音的switch-case语句不需要显式的添加“break”,也没有fall-though。如下面代码所示: Compared to other programming languages (such as C), Go's switch-case statement doesn't need explicit "break", and not have fall-though characteristic. Take the following code as an example: package main import ( "fmt" ) func checkSwitch(val int) { ...阅读全文

博文 2019-06-20 22:32:54 羊羽shine

Go mod 管理

扯淡的话,可以跳过 闲来无事,把公司项目的包管理做了一个升级,其实好久之前就想去做升级,一直懒得摆弄,就没当回事,知道本地vendor遇到一些莫名的问题,PC端代码中可以看到github/xxx一个包,包括代码等都可以查看到,push到远程后,vendor里面只是一个@版本号之类的东西~,并没有代码,在服务端编译的时候,如果没有一些特殊配置(梯子),这个vendor+版本号的玩意是会出问题,提示找不到github/xxx这个包。。后来干脆把之前的依赖重搞一遍省的之后头疼😓 go mod 简单介绍 go语言自诞生起,包依赖管理一直是被各大社区吐槽的点 项目必须放在GOPATH下,包括依赖的包也需要放GOPATH下 如果有多个项目,需要依赖不同版本的包,就会很蛋疼 非官方包管理的出现 goven...阅读全文

博文 2019-12-17 18:32:45 火星云s1

Google Maglev Hashing实现

背景 Maglev是Google开发的基于kernal bypass技术实现的4层负载均衡,它具有非常强大的负载性能,承载了Google据大部分接入流量。Maglev在负载均衡算法上采用自行开发的一致性哈希算法被称为Maglev Hashing,该哈希算法在节点变化时能够尽量少的影响其他几点,且尽可能的保证负载的均衡,是一个非常优秀的一致性哈希算法,Google的技术都是自带光环哈!下面想用Golang做一个简单的实现。 原理说明 Maglev Hashing的基本思想是为每一个节点生成一个优先填充表,列表的值就是该节点想要填充查询表的位置. lookup table 如Table1所示,节点B0,会按照顺序3,0,4,...依次去尝试填充查询表。实际上,所有的节点会轮流按照各自优先列表的值...阅读全文

博文 2019-02-18 03:34:42 Damon_330b

GO语言学习笔记(四)GO语言控制语句

一、小程序要求:输出100以内能被2整除的数代码如下: package main import "fmt" func main() { var max int = 100 number := 2 for i := 1; i <= max; i++ { if i%number == 0 { fmt.Println(i) } } } 运行以及输出如下:执行:go run test1.go输出结果:2468101214161820......9092949698100 包含的知识点:1)变量Go语言包含的值类型:字符串、整型、浮点型、布尔型等 变量的声明和赋值的四种写法: ⑴var 变量 = "字符串"解释:使用var关键字声明一个变量并赋值 ⑵var 变量a, 变量b int = 数字1, 数字...阅读全文

博文 2019-01-28 17:35:13 Mr大表哥

golang-101-hacks(23)——io.Reader接口

注:本文是对golang-101-hacks中文翻译 io.Reader 是一个基础性的 且使用非常频繁的接口 type Reader interface { Read(p []byte) (n int, err error) } 对于实现了io.Readerr的接口类型,可以将它想象成一个管道。将内容写入管道的一端,通过实现了' Read() '方法的类型从管道的另一端读取内容。无论是普通文件,还是网络套接字。只要实现了io.Readerr的接口的类型,都可以读取其内容。 如下例所示 package main import ( "fmt" "io" "log" "os" ) func main() { file, err := os.Open("test.txt") if err != n...阅读全文

博文 2019-06-28 02:02:40 羊羽shine

Go之断言类型(assert type)

1.背景介绍: 笔者最近在使用一个数据结构实现多个接口,但是却发现想要在一段时间内转换成接口1,另外一段时间转换成接口2,所以也就使用到了断言类型。在看过断言类型之后,觉得还是很有必要讲一讲这个断言类型,于是便有了这篇文章。2. 断言类型介绍:接口类型提供一种,将接口类型转换成具体类型的转换方法,也就是断言类型(assert type)。使用方法如下所示:1)语法一t := i.(T)解释说明:T:表示的是具体的数据类型,i:表示的是接口变量i,t:表示的是转换之后的变量。功能介绍:这个语句实现的功能是:将接口变量i按照类型T转换成t,其中t中的值是i转换得来的,一旦转换不成功就会触发一个panic。2)除此之外还有另外一个写法:t, ok := i.(T)功能介绍:表达式里面多了一个ok,...阅读全文

博文 2020-08-11 19:51:18 ZhDavis

再次升级!阿里云Kubernetes日志解决方案

摘要: 今天阿里云Kubernetes日志解决方案再次升级,为您带来以下改进: 1、极致部署体验:只需一条命令一个参数即可完成整个K8S集群的日志解决方案部署。 2、支持更多配置方式:除原生控制台、SDK配置方式外,支持通过CRD方式进行配置(kubectl、控制台、K8S openapi)。 背景 针对K8S日志采集存在的采集目标多、弹性伸缩难、运维成本大、侵入性高、采集性能低等问题,在18年2月份日志服务和容器服务团队一起发布了阿里云Kubernetes日志解决方案。1分钟内即可完成整个集群部署,实现该节点上宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。并且后续集群动态伸缩无需对采集做任何二次部署。 今天阿里云Kubernetes日志解决方案再次升级,为您...阅读全文

golang快速入门[2.1]-go语言开发环境配置-windows

golang快速入门[2.1]-go语言开发环境配置-windows接下来,我们将讲解在windows、linux、macos三大平台上配置go语言的开发环境。windows安装Go语言开发包配置go语言的开发环境的第一步是要在go官网下载页面下载开发包windows需要下载msi后缀文件,msi是windows下的安装包文件格式,用于安装,存储和删除程序这里我们下载的是 64 位的开发包,如果读者的电脑是 32 位系统或者有特殊的需求,则需要下载 32 位的开发包在上图所示页面中向下滚动即可找到 32 位开发包的下载地址,如下图所示双击我们下载好的Go语言开发包即可启动安装程序,如下图所示,这是Go语言的用户许可协议,无需管它,直接勾选“I accept …”然后点击“Next”即可。在 ...阅读全文

博文 2020-02-07 12:33:13 jonson_jackson

golang学习笔记-map类型

在刚刚接触go语言的时候,就看到很多地方出现了map。就对这个map很困惑,那么这个map究竟是什么呢。让我们一起来看一看吧。 map (映射)是一个种数据结构,用于存储一些无序的键值对。映射使用了两个数据结构来存储数据。第一个数据结构是数组,内部存储的是用户选择桶的散列值。第二个数据结构是一个字节数组,用于存储键值对。映射是一个存储键值对的无序集合。 创建和初始化 go语言中可以使用make函数,也可以使用使用字面量的方法来创建映射(map)。如下所示 //通过make函数 创建一个映射,键类型是string ,值是int list := make(map[string]int) list["test"]= 1 fmt.Println(list["test"]) //创建一个映射,键值都是...阅读全文

博文 2019-09-03 17:02:45 旧梦发癫

golang-101-hacks(25)——Buffered read

bufio包提供缓冲读取的函数。如下面例子所示 (1) 首先创建test.txt (1) Create a test.txt file first: # cat test.txt abcd efg hijk lmn You can see test.txt contains 4 lines. (2) See the following program: package main import ( "bufio" "fmt" "io" "log" "os" ) func main() { f, err := os.Open("test.txt") if err != nil { log.Fatal(err) } r := bufio.NewReader(f) for { if s, err :...阅读全文

博文 2019-06-30 00:02:40 羊羽shine

golang快速入门[2.2]-go语言开发环境配置-macOS

golang快速入门[2.2]-go语言开发环境配置-macOSmacos安装Go语言开发包配置go语言的开发环境的第一步是要在go官网下载页面下载开发包macOS需要下载pkg后缀文件macOS和iOS操作系统Apple软件包使用.pkg扩展名,在内部使用Xar格式Mac OS 的Go语言开发包是 .pkg 格式的,双击我们下载的安装包即可开始安装,一路点击“继续”即可。双击我们下载好的Go语言开发包即可启动安装程序,如下图所示,这是Go语言的用户许可协议,无需管它,直接勾选“I accept …”然后点击“Next”即可。安装包会默认安装在 /usr/local 目录下,如下所示。这个目录的结构遵守 GOPATH 规则,后面的章节会提到这个概念。目录中各个文件夹的含义如下表所示。目录名说...阅读全文

博文 2020-02-07 19:33:10 jonson_jackson

【Windows系统】基于vscode搭建go语言开发环境

微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 image 1.golang安装包下载与安装 关于vscode的下载,请参见历史文章Ubuntu16.04下搭建vscode的C++开发环境,本文就不再赘述啦~下面直接下载golang安装包,下载地址放文章的最后部分了。打开链接后,我们可以看到go语言的吉祥物一只可爱的小地鼠。 image 点击“Download Go”按钮即可进入下载页面,选择对应操作系统的安装包。注:本文是以Windonws系统为例,Go语言的安装包版本为13.0。注意:这里go安装包的版本必须选择13.0,这是由于后面的go语言相关依赖包也是13.0版本的。为了保证兼容性,保持版本一致则后续步骤不会报错。如下图所示: image 安装包下载...阅读全文

博文 2020-09-20 23:32:41 CurryCoder

Go语言之反射

来自本人公众号:灰子学技术 原文链接:https://mp.weixin.qq.com/s/SBqx0theCm-GWzV6CPIAYA 笔者原本是C++开发人员,之前对于反射没太大概念,学了GO之后,才开始接触,在研究了一段时间之后,有了些认识,便整理一个帖子,希望对大家有所帮助。在学习反射的时候,笔者一直在问自己,反射是什么?为什么要用到反射?它是怎么实现的?笔者觉得,在知道这些问题的答案之后,才算是真正了解反射。下面笔者便从这些问题来着手整理反射。一、反射是什么?维基百科上的定义:在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且“修改”自己的行为。《Go 语言圣经》中是这样...阅读全文

博文 2019-12-11 18:32:46 灰常出色

jvm垃圾回收算法

前言java相较于c、c++语言的优势之一是自带垃圾回收器,程序开发人员不用手动管理内存,内存的分配和释放完全由gc(Garbage Collector)来做,极大地提高了软件开发效率及程序健壮性(手动管理内存容易造成内存泄漏)。凡事皆有两面性,java gc在给我们带来内存管理便捷性的同时,也面临STW(Stop The World)影响程序吞吐的缺陷。作为java开发人员,只有深入理解jvm垃圾回收的机制,才能在程序性能出现瓶颈时,更好的对程序进行优化。欢迎学Java和大数据的朋友们加入java架构交流: 855835163群内提供免费的架构资料还有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高...阅读全文

博文 2019-01-27 11:34:48 Java大生

天天CURD,你了解为了执行SQL,MySQL用了怎样的架构设计吗?

大家好, 从今天开始我们开启MySQL底层原理的探索里程,今天是第一篇我们将MySQL从一个黑盒状态一点点拨云见日剖析来了解整个MySQL的架构设计和底层组件 把MySQL当作一个黑盒来执行SQL 现在我们来看看, 对于研发工程师来说数据库是什么东西?平时我们做系统开发时,一般情况下都会连接到一个MySQL数据库上去,去执行各种增删改查语句。如下图所示: image.png 但是实际上我们在使用MySQL的过程中,总会遇到这样那样的一些问题,比如死锁异常、SQL性能太差、MySQL gone away等等。在遇到MySQL数据库的一些问题时,一般都会上网搜索博客,然后自己尝试捣鼓着解决一下,最后解决了问题,可能也没搞明白里面的原理。 因此我们就要去探索MySQL底层原理的方方面面,以及探索在...阅读全文

博文 2020-07-26 19:33:13 meng_philip123

windows环境下,VS Code配置GO语言开发环境

前言 部门内部使用微服务用到猪齿鱼框架,可是猪齿鱼很多组件都用到了GO语言,想看懂最起码需要学习一下语法。于是,GO语言学习之旅开始了。 先用菜鸟教程学习了语法什么的,大概的练练手。 因为要看源码,看人家的项目,于是需要有个编辑器看着方便,我们用的vsCode,所以就要在VSCode中配置GO语言开发环境 好吧,还是需要借助一下搜索引擎 前置 1.Golang环境配置 GO语言环境安装包下载地址:https://golang.google.cn/dl/选择windows,如下图安装完成后需要配置环境变量,主要有三个地方需要配置。用户变量中的GOPATH,系统环境变量中的GOROOT与Path,具体解释 GOPATH GO语言的工作空间,可以自己随便建一个文件夹就行 例如我的就是D:Go_Wo...阅读全文

博文 2019-10-17 10:02:48 liuxliang

按顺时针打印矩阵

存在二种解题思路: 一种是递归解法,一种是层层递进解法 图解递归解法 如图所示, 一个5*5的矩阵 先打印最外层的圈, 然后剩余最里层3*3的矩阵, 如图. 将3*3的矩阵继续打印最外层,思路与打印最外层思路一样,我们就可以考虑使用递归实现. 最后只剩余一个元素,也可以看成一个矩阵,不过不同大小的矩阵会出现不同形状的矩阵.共3种情况, 如下图. 如图所示, 共三种情况 一个方向的情况 三个方向的情况 四个方向的情况 代码实现思路 矩阵用代码表示为二维数据 首先遍历第一行所有的元素,即图中的从左到右箭头的数据. 然后遍历最右边的元素,即最后一列数据.即图中的从上到下箭头的数据. 再遍历最后一行元素,即图中从右到左箭头的数据 最后遍历最左列的元素,即图中从下到上箭头的数据. 将剩余的矩阵构建成一...阅读全文

博文 2019-12-17 14:32:45 百里

涂鸦智能分布式定时调度系统Sigmax设计与实践

1.导读 Sigmax是涂鸦智能中间件团队基于Golang开发的一款高性能,分布式的定时任务调度引擎。针对IoT领域特有的复杂多样的定时任务场景,Sigmax提供了一套统一,稳定,精准的定时调度平台,来协助公司内各业务线方便的实现定时场景。 目前Sigmax已经在公司内部稳定运行了1年时间,单集群的日任务调度、日均任务触发数达千万次。 2.背景 涂鸦智能作为全球领先的AI+IoT平台,连接着海量的智能设备,每天会有大量的用户控制自己的智能设备以实现一些智能化的场景,比如: 用户A,每天早上7点自动打开窗帘; 用户B,当访客通过智能门禁之后,定时移除访客的权限; 用户C,日出或者日落之后,延时执行一个联动的场景,等等; 除此之外,我们的内部服务之间也存在大量的定时任务,比如: BI同学每天定时...阅读全文

博文 2020-05-30 08:32:42 涂鸦智能技术团队

golang-101-hacks(20)——接口

接口是由若干方法组成的引用类型,包含了接口的所有方法的类型被认为自动实现了该接口类。通过接口,您可以更加体会到面向对象编程。如下所示: package main import "fmt" type Foo interface { foo() } type A struct { } func (a A) foo() { fmt.Println("A foo") } func (a A) bar() { fmt.Println("A bar") } func callFoo(f Foo) { f.foo() } func main() { var a A callFoo(a) } 运行结果如下 A foo 让我们具体分析一下代码 type Foo interface { foo() } 上面的接...阅读全文

博文 2019-06-21 23:32:44 羊羽shine

GoLang variables

变量命名 命名方法 var name type是定义单一变量的语法 package main import "fmt" func main(){ var age int //variable declaration fmt.Println("My age is",age) } 该语句中var age int声明了一个名为age的int类型变量. 但是并没有进行赋值, 这种情况下该类行变量被赋予0为他的初始值. 输出: my age is 0 一个变量可以被分配任意该类型的值. 该程序中的age变量可以被赋予一个任意的integer value package main import "fmt" func main(){ var age int //variable declaration f...阅读全文

博文 2019-07-08 21:32:39 Cease息事

Go 并发模型

今天我们来了解一下 Go 语言的协程并发机制,这也可能是 Go 语言最为吸引人的特性了,了解它的原理和底层机制对于掌握 Go 语言大有裨益,话不多说开始吧! 并发和并行 并发和并行都是为了充分利用 CPU 多核计算资源所提出来的概念,相信我们或多或少都对二者的概念有所了解: 并发指的是在同一时间段内,多条指令在 CPU 上同时执行; 并行指的是在同一时刻内,多条指令在 CPU 上同时执行。 并发程序并不要求 CPU 具备多核计算的能力。在同一时间段内,多个线程会被分配一定的执行时间片,在 CPU 上被快速轮换执行。线程执行的时间片时间耗尽或者任务完成了,会被 CPU 调度换下,执行其他的线程任务。通过这样的方式,可以在宏观上模拟出多个线程同时执行的效果。 而并行程序要求 CPU 提供多核并行...阅读全文

博文 2020-06-30 23:32:54 雪上霜

对称加密-DES的原理和实现(Golang源码)

模板引擎对LaTeX支持不太好,可以查看静态页面:链接 个人主页 DES算法 DES的基本构造元件 初始置换(Initial Permutation,IP) 初始置换为64位数组,Golang中采用的初始置换如下所示 // ctypto/des/const.go package des // Used to perform an initial permutation of a 64-bit input block. var initialPermutation = [64]byte{ 6, 14, 22, 30, 38, 46, 54, 62, 4, 12, 20, 28, 36, 44, 52, 60, 2, 10, 18, 26, 34, 42, 50, 58, 0, 8, 16, 2...阅读全文

博文 2020-03-30 23:33:29 Jupiter_Van

Go内存管理之TCMalloc

自公众号:灰子学技术,原文链接:https://mp.weixin.qq.com/s/-b26YiHjL3V9CNvk0LZmEgTCMalloc作为Go语言内存管理的核心算法,是理解和掌握Go的内存管理非常重要的一步,本章主要介绍TCMalloc的是什么样子的。TCMalloc的概述 TCMalloc全称是Thread-Caching Malloc,是Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征:对抗内存碎片、在多核处理器能够 scale。1. TCMalloc相比glibc 2.3而言内存分配更快。2.TCMalloc对于多线程程序而言,减少了锁机制,对于小对象而言,可以说没有锁的操作,对于...阅读全文

博文 2020-01-27 17:32:46 灰常出色

QuickBI助你成为分析师——搞定数据源

摘要: QuickBI支持多种数据源连接,添加数据源是数据分析展示的第一步,下面来详细介绍一下产品数据源支持情况! Quick BI是一个基于云计算的灵活的轻量级的自助BI工具服务平台,提供海量数据即时分析 ,拖拽式操作、丰富的可视化效果,帮助您轻松自如地完成数据分析、业务数据洞察 。它不仅是业务人员看数据的工具 ,更是数据化运营的助推器,解决大数据应用“最后一公里”的问题,实现“人人都是数据分析师”。 产品的核心流程如下图所示, ![图片描述](http://img.blog.csdn.net/20180328113309600?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5...阅读全文

Bytom储蓄分红合约解析

储蓄分红合约简介 储蓄分红合约指的是项目方发起了一个锁仓计划(即储蓄合约和取现合约),用户可以在准备期自由选择锁仓金额参与该计划,等到锁仓到期之后还可以自动获取锁仓的利润。用户可以在准备期内(dueBlockHeight)参与储蓄,按照合约规定可以 1:1 获取同等数量的储蓄票据资产,同时用户锁仓的资产(deposit)将放到取现合约中,并且项目方是无法动用的,等到锁仓期限(expireBlockHeight)一到,用户便可以调用取现合约将自己储蓄的资产连本待息一同取出来。其示意图如下: 从上图中可以看出,项目方发布了一个利润为20%的锁仓项目,其中储蓄合约FixedLimitCollect锁定了1000个票据资产(bill),同时项目方将200个储蓄资产(deposit)锁定到利息合约中。...阅读全文

博文 2019-03-21 16:34:42 比原链Bytom

你的Helm安全吗?

一、背景Kubernetes是目前最为流行、成为事实标准的容器集群管理平台,为容器化应用提供了部署运行、资源调度、服务发现和动态伸缩等一系列完整功能。在Kubernetes当中,用户通过使用API对象,如Pod、Service、Deployment等,来描述应用的程序规则,而这些资源对象的定义一般需要写入一系列的YAML文件中,然后通过 Kubernetes 命令行工具Kubectl进行部署。由于通常应用程序都涉及到多个Kubernetes API对象,而要描述这些API对象就可能要同时维护多个YAML文件,从而在进行 Kubernetes 软件部署时,通常会面临下述几个问题:如何管理、编辑和更新这些这些分散的 Kubernetes 应用配置文件如何把一套相关的配置文件作为一个应用进行管理如...阅读全文

Golang赫夫曼树及其编码

赫夫曼树 在树这种数据结构中,从树中的一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上分支的数目叫做路径长度,从根结点到每个结点的路径长度之和叫做树的路径长度。如果一个结点带有权重,则路径长度和该结点权重的乘积叫做该结点的带权路径长度(WPL),一棵树的带权路径长度为树中所有叶子结点的带权路径长度之和。 赫夫曼树(霍夫曼树),又称最优树或者最优二叉树。假设有n个权值{, ,...,},通过这n个权值构造n个结点,每个结点的权值为(1<=i<=n),然后以这n个结点为叶子结点构造一棵二叉树,在所有构成的二叉树中带权路径长度最小的二叉树被称作最优二叉树或者赫夫曼树。如下: 给定4个权重分别为7, 5, 2, 4的四个叶子结点a, b, c, d, 下图为用该4个结点构造的3棵二叉树...阅读全文

博文 2020-08-29 17:32:42 心中的日月_pyihe

小巧玲珑的计算机语言 - Red - 双语 - R1.1

Red语言并不是一个很流行的语言,它自REBOL语言发展而来,但包括Red和它的母语REBOL,甚至都没有排进编程语言排行榜的前50位(根据最新一期TIOBE排行榜)。但是,Red语言是一门小巧玲珑,而又功能不弱的轻量级编程语言。所谓的轻量级,是指整个语言的编写相对更贴近一般人类的思路,贴近高级语言因而书写便捷,编程和运行环境非常简单,实际上只有一个可执行文件。而功能不弱,体现在下面几个地方:跨平台、即支持解释运行又支持编译运行、内置的语言级别上支持图形界面(GUI)开发、方便的网络编程能力(例如发邮件、抓取网页等往往一条语句就可以实现)。 下面,我们从英语原文来稍作深入地了解一下。注意:我们的译文会增加一些必要的解释。Red is a programming language that f...阅读全文

博文 2020-03-03 15:33:12 陆满庭

Golang中的自定义json序列化

后端开发人员跟前端对接接口的时候,或多或少都会面临一些沟通问题,比如说枚举字符的定义,比如有整形状态字段:state 1: 成功 2: 失败 3: 处理中 通常给前端的时候,前段要做的是将1,2,3以及对应的中文释义存储为key/value的形式,key与value单看都无法知道对方的语义, 比如我只知道状态值为“1”, 是无法将其与“成功”对应起来的(当然这套状态的设计者肯定是知道的),后端通常给到前端的restful api 接口定义也是key/value的形式,这乍一看其实也没啥毛病,只要有key/value也没问题,后端定义通常会是 type MyResponse struct { ID int64 `json:"id"` State int `json:"state"` } 但数字...阅读全文

博文 2020-10-13 23:32:38 wu_sphinx

剑指 0ffer 二维数组中的查找

算法名称:二维数组中的查找 题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。 例如,我们要在上述的二维数组中查找数字7的步骤如下图所示: F3708B2CFD9F71157AA94175FAE464DB.jpg 实例代码: Ja...阅读全文

博文 2020-06-08 01:33:15 快乐的工程师

GoLang 环境配置

Golang 环境配置系统硬件与操作系统:64位Windows操作系统,处理器 Intel(R) Core(TM) i7-8750 CPU @ 2.20GHz安装过程安装 VSCode 编辑器直接上官网上下载 VSCode 即可,按照安装提示即可完成安装。在VSCode上运行Golang语言的好处Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在 Windows,macOS 和 Linux 桌面上运行。它内置了对JavaScript,TypeScript和Node.js的支持,并为其他语言(如C ++,C#,Java,Python,PHP,Go)和运行时(如.NET和Unity)提供了丰富的扩展生态系统。安装Golang在Golang官网网站即可完成下载,链接:...阅读全文

博文 2020-10-03 09:32:38 hupf3

Tank技术【3-6】GoLang语法实战学习(4)

九、结构体 Go语言的结构体和C语言是类似的。定义结构体如下: type books struct { sName string sAuthor string nID int64 fPrice float64 sOwner string } 使用结构体有两种办法: var myBook books myBook.sName ="Go语言实战" myBook.sAuther = "Tank" myBook.nID =139581 myBook.fPrice = 58.88 myBook.sOwner ="Tank" theBook :=books{"Go语言实战", "Tank", 139581, 58.88, "Dennis"} yourBook := books{sName:"Go语言实战...阅读全文

博文 2020-01-06 19:32:43 idontknowctt

Fabric2.0学习进阶——链码管理(四)

4.1 安装链码 Fabric-sample工程自带了很多示例链码,位于fabric-samples/chaincode目录中,本文测试安装abstore工程的go版本到org1.peer0和org2.peer0两个节点。 链码安装成功之后,就可以调用链码完成交易操作了。 image-20200630142347946 安装链码的所有操作均需要先进入cli容器,执行如下命令: docker exec -it cli bash 4.1.1 链码打包 链码打包执行如下命令: peer lifecycle chaincode package abs.tar.gz --path github.com/hyperledger/fabric-samples/chaincode/abstore/go/ -...阅读全文

博文 2020-07-02 00:33:43 落羽

Go学习第一集,从console接收命令行参数

废话少说,直接上代码: package main import ( "flag" "fmt") var infile *string =flag.String("i","infile","File contains values for inputpath") var outfile *string =flag.String("o","outfile","File to receive values for outputpath") func main() { flag.Parse() if infile!=nil{ fmt.Println("infile=",*infile,"outfile=",*outfile) } } 进入文件所在目录,执行 go build console.go,生...阅读全文

博文 2020-01-02 11:32:41 Nirvana

go语言数组的细枝末节

1. 内部实现 在Go语言里,数组是一个长度固定的数据类型,用于存储一段具有相同的类型元素的连续块。存储的类型可以是内置类型,也可以是自定义类型。数组是一种非常有用给的数据结构,因为其占用的内存是连续分配的。由于内存连续,CPU能把正在使用的数据缓存更久的时间。而且内存连续很容易计算索引,可以快速访问数组里的任意数据。 在Go语言中,数组是一种类似于整形,浮点型,字符串的基本数据类型,区别于C++语言的是,Go语言的数组在函数传参时是值传递的,因此要想通过某个函数修改数组的值,就必须通过传入数组的指针来实现,实际上Go语言中的所有函数传参都是值传递。 2. 声明和初始化 数组 的类型名是 [n ]elemetType ,其中 n 是数组长度, elementType 是数组元素类型 。 数组...阅读全文

博文 2020-01-13 14:32:44 lioney

力扣算法学习个人分享812. 最大三角形面积

812. 最大三角形面积 问题描述 给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。 示例 输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 输出: 2 解释: 这五个点如下图所示。组成的橙色三角形是最大的,面积为2。 问题分析 在平面直角坐标系中,只要三个坐标点不在同一直线上就可构成三角形。 当三个坐标点在同一直线上时,面积为零。 当三个坐标点不在同一直线上,求三个坐标点构成的三角形面积最简单的方式是使用向量。 向量(也称欧几里得向量、几何向量、矢量) 指具有大小和方向的量。它可以形象的表示为带箭头的线段。箭头所指代表向量的方向;线段长度代表向量的大小。 已知坐标点求向量 设A(x1,y1),B(x2,y2),C(x3,...阅读全文

博文 2020-03-05 15:32:44 孤狼

golang container/ring源码解读

最近在看gokit的熔断器源码的时候看到了内部有使用到 container/ring 的这个数据结构;虽然大体知道这个数据结构提供的一个常用API,也知道该怎么用;但是不知道内部具体是怎么实现的。所以就看了内部的源码实现;在这里分享出来,有不对的地方欢迎大家指正。 在正式开始讲解源码之前先铺垫几个基础的数据结构知识 1、单链表 节点内部会存储当前节点的值跟下一个节点的指针,单链表的访问只能向前推进访问不能后退 单链表 2、单向循环链表 单向循环链表的尾节点的后继节点指向了链表的头结点;其他跟单链表完全相同 单向循环链表 3、双向链表 双向链表每个节点内部存储了当前节点的值,后继节点的指针,前驱节点的指针 双向链表 4、双向循环链表 双向循环链表的头结点的前驱节点为链表的尾节点指针,而尾结点的...阅读全文

博文 2020-05-28 21:32:46 airun

Kuiper 中使用 Golang 模版 (template) 定制分析结果

简介 用户通过 Kuiper 进行数据分析处理后,使用各种 sink 可以往不同的系统发送数据分析结果。针对同样的分析结果,不同的 sink 需要的格式可能未必一样。比如,在某物联网场景中,当发现某设备温度过高的时候,需要向云端某 rest 服务发送一个请求,同时在本地需要通过 MQTT 协议 往设备发送一个控制命令,这两者需要的数据格式可能并不一样,因此,需要对来自于分析的结果进行「二次处理」后,才可以往不同的目标发送针对数据。本文将介绍如何利用 sink 中的数据模版(data template )来实现对分析结果的「二次处理」。 Golang 模版介绍 Golang 模版将一段逻辑应用到数据上,然后按照用户指定的逻辑对数据进行格式化输出,Golang 模版常见的使用场景为在网页开发中,...阅读全文

博文 2020-07-16 12:32:40 EMQX

vue-element-admin 上传upload图片慢问题处理

前言 vue-element-admin自带上传图片组件,在使用的过程中发现上传速度很慢,尤其是上传一些大图需要耗时几十秒不能忍受。出现这种情况,是因为upload组件会将图片上传到action="https://httpbin.org/post" ,并返回转换成base64编码格式的数据。 格式类似: data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsIC..... 而且有可能这个base64编码比上传源文件还要大。 这样做有两个缺点: 多一步上传文件到第三方网站(https://httpbin.org/p...阅读全文

博文 2020-06-20 17:32:51 guyan0319

第五章 九析带你轻松完爆 go - 字符串操作

目录1 前言2 字符串操作 2.1 字符串声明与赋值 2.2 字符串长度 2.3 字符串轮询 2.4 字符串中字符替换1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:2 字符串操作2.1 字符串声明与赋值 字符串声明和赋值使用 := 操作符。代码如下:package mainimport "fmt"func main() { s := "hello jiuxi" fmt.Println(s)}2.2 字符串长度 获取字符串长度可以使用函数 len()。但是英文字符和中文字符 len() 的处理结果不同,英文字符长度为 1,中文字符长度为 3。代码如下:package mainimport "fmt"func main() { enStr := "h" cnS...阅读全文

博文 2020-02-29 22:33:11 九析