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

Go-map

本文将简单讲解一下map的常见使用,会把主要的流程描述一下,具体细节不会过多阐述(因为我也没看全,需要遇到问题时再仔细看源码)。我用Go时间还不长,还在学习阶段,如果有误,欢迎批评指正,感谢~ 1 哈希计算与碰撞 1.1 哈希计算 map在各个语言中,都是很常见的。其底层运用的就是hash。在Go中也不例外。 hash 计算就是根据key经过hash计算,找到其存储的位置,然后将对应的值存放在这个位置。 1.2 碰撞 通常,讲到hash 计算,就不可避免地讲到hash碰撞。什么意思呢? 就是两个不同的key经过hash计算,找到的位置是一样的。 那么怎么解决呢? 有如下两种方案: (1)开放寻址法: 即如果keyA经过计算,找到了位置A,发现位置A上有元素了,就会一直往后找,知道找到一个空位...阅读全文

博文 2019-09-24 20:32:52 aside section ._1OhGeD

learn go with tests 学习笔记(一) hello world

引言 终于开始学习golang细节了,此系列笔记旨在记录学习路上遇到的一些坑,还有一些感觉需要特别注意的知识点 环境准备 IDE:goland go version: go version go1.14.1 darwin/amd64 遇到问题 (一)运行 go test 报错 go: cannot find main module; see 'go help modules' 问题分析:其根本原因是我使用了go mod进行依赖管理,然而使用项目根目录没有go.mod文件 解决办法:添加go.mod 文件,方法有二 (1)在目录中运行 go mod init (2)如果使用的是goland ide,可以通过配置完成 https://goproxy.io,direct 知识点 (一)如何编写单元...阅读全文

博文 2020-05-23 09:32:56 硌手小石头

区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理二

兄弟连区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理二。 # 椭圆曲线加解密及签名算法的技术原理及其Go语言实现 ### 椭圆曲线加解密算法原理 建立基于椭圆曲线的加密机制,需要找到类似RSA质因子分解或其他求离散对数这样的难题。 而椭圆曲线上的已知G和xG求x,是非常困难的,此即为椭圆曲线上的的离散对数问题。 此处x即为私钥,xG即为公钥。 椭圆曲线加密算法原理如下: 设私钥、公钥分别为k、K,即K = kG,其中G为G点。 公钥加密: 选择随机数r,将消息M生成密文C,该密文是一个点对,即: C = {rG, M+rK},其中K为公钥 私钥解密: M + rK - k(rG) = M + r(kG) - k(rG) = M 其中k、K分别为私钥、公钥。 ### 椭圆曲线签名...阅读全文

博文 2018-11-09 14:17:07 ITXDL

三、【Zinx第三章-基础路由模块】Golang轻量级并发服务器框架

【Zinx教程目录】 Zinx源代码: https://github.com/aceld/zinx 一、Zinx第一章-引言 二、Zinx第二章-初识Zinx框架 三、Zinx第二章-基础路由模块 三、Zinx框架基础路由模块 ​ 现在我们就给用户提供一个自定义的conn处理业务的接口吧,很显然,我们不能把业务处理业务的方法绑死在type HandFunc func(*net.TCPConn, []byte, int) error这种格式中,我们需要定一些interface{}来让用户填写任意格式的连接处理业务方法。 ​ 那么,很显然func是满足不了我们需求的,我们需要再做几个抽象的接口类。 ​3.1 IRequest 消息请求抽象类 ​ 我们现在需要把客户端请求的连接信息 和 请求的数据...阅读全文

博文 2019-01-31 08:34:43 IT无崖子

Golang 文件读写

Golang 文件读写 读文件 使用ioutil直接读取 package read import ( "fmt" "io/ioutil" "strings" ) // 使用ioutil直接读取 // 读取文件内容,并返回[]byte数据和错误信息。err == nil时,读取成功 func main() { file := "/usr/local/nginx/logs/access.log" if contents, err := ioutil.ReadFile(file); err == nil { //[]byte类型,转换成string类型后会多一行空格,使用strings.Replace替换换行符 result := strings.Replace(string(contents),...阅读全文

博文 2019-08-01 14:32:43 战神悟空

Golang之反射

在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。 引用 提高 golang 的反射性能 Golang 反射性能优化 Go 语言反射三定律 Go Reflect 性能 图解go反射实现原理 基本方法 reflect包里定义了一个接口和一个结构体,即 reflect.Type 和 reflect.Value,它们提供很多函数来获取存储在接口里的类型信息。 reflect.Type 主要提供关于类型相关的信息,所以它和 _type 关联比较紧密; reflect.Value 则结合 _type 和 data 两者,因此程序员可以获取甚至改变类型的值。 reflect 包...阅读全文

博文 2020-05-08 23:32:45 网管同学

Golang的异常处理介绍

package main import "github.com/astaxie/beego/logs" func main() { //关于Golang的异常处理方式说明 //1.关键词 panic 2.recover 3.defer函数 //panic 的作用是抛出一个错误信息 可以看作是Java中的throws new Exception //panic 调用完程序会立即停止 后续程序不会再执行 //demo1. var number=10 if number==10{ panic("错误信息") } logs.Info("程序结束") } //========打印结果=========== panic: 错误信息 goroutine 1 [running]: main.main() D...阅读全文

Golang 获取 goroutine id 完全指南 | 行思錄

在Golang中,每个goroutine协程都有一个goroutine id (goid),该goid没有向应用层暴露。但是,在很多场景下,开发者又希望使用goid作为唯一标识,将一个goroutine中的函数层级调用串联起来。比如,希望在一个http handler中将这个请求的每行日志都加上对应的goid以便于对这个请求处理过程进行跟踪和分析。 关于是否应该将goid暴露给应用层已经争论多年。基本上,Golang的开发者都一致认为不应该暴露goid(faq: document why there is no way to get a goroutine ID),主要有以下几点理由: goroutine设计理念是轻量,鼓励开发者使用多goroutine进行开发,不希望开发者通过goid做g...阅读全文

博文 2019-07-21 21:20:30 Travel Coder

go微服务框架go-micro深度学习(三) Registry服务的注册和发现

服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性。go-micro框架的服务发现有自己能用的接口Registry。只要实现这个接口就可以定制自己的服务注册和发现。 go-micro在客户端做的负载,典型的Balancing-aware Client模式。 服务端把服务的地址信息保存到Registry, 然后定时的心跳检查,或者定时的重新注册服务。客户端监听Registry,最好是把服务信息保存到本地,监听服务的变动,更新缓存。当调用服务端的接口是时,根据客户端的服务列表和负载算法选择服务端进行通信。 go-micro的能用Registry接口 type Registry interface { Register(*Service, ...RegisterOpti...阅读全文

博文 2019-08-01 13:58:39 li-peng

深入理解Go之generate

概述 开发中经常有定义错误码这样的需求,错误码唯一标识具体的错误信息。另外还需要设置每个错误的具体描述。在 HTTP 协议中,200 表示 "OK",404 表示"Not Found"。在 Linux 系统中,ENOENT 的值为 2,表示"No such file or directory"。syscall包中定义了Errno类型表示系统错误码,非常易用使用,建议去看看。 每次定义错误码的时候,同时需要添加描述信息。而且描述信息经常会忘。本文介绍go generate + stringer工具链优雅地解决这个问题。 这里顺带提一句,golang tools 是官方提供的工具集,是 Gophers 的工具宝库,值得好好探索一番,参见Github 地址,文档地址。里面有丰富的开发辅助工具,所有...阅读全文

博文 2019-08-28 11:32:52 darjun

Go的Defer、Panic和Recover (翻译)

dont-panic.png 翻译自:https://blog.golang.org/defer-panic-and-recover Go有和语言一样常见的流程控制语句:if, for, switch, goto。同时也可以使用go语句实现在不同的goroutine中运行代码(并发)。不过,今天我们将来讨论一些少见的话题:defer、panic和recover。 Defer defer语句会将函数推入到一个列表中。同时,列表中的函数会在return语句执行后被调用。defer常常会被用来简化资源清理释放之类的操作。 举个例子,我们来观察下下面这个函数,它的主要功能是打开两个文件并将一个文件的内容拷贝到另一个文件: func CopyFile(dstName, srcName string) ...阅读全文

博文 2019-02-24 19:34:42 波罗学

Docker 占用资源膨胀那么快,你知道怎么清理?

如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用。本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的 镜像、容器、网络和数据卷。 查看 docker 占用的资源 在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源。这需要综合使用不同的命令来完成。 docker container ls:默认只列出正在运行的容器,-a 选项会列出包括停止的所有容器。 docker image ls:列出镜像信息,-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。 docker volume ls:列出数据卷。 docker network ls:列出 netwo...阅读全文

博文 2019-03-26 19:34:40 51reboot

爬虫管理平台Crawlab v0.3.0发布(Golang版本)

基于Golang的分布式爬虫管理平台,支持Python、NodeJS、Java、Go、PHP等多种编程语言以及多种爬虫框架。 项目自今年三月份上线以来受到爬虫爱好者们和开发者们的好评,不少使用者还表示会用Crawlab搭建公司的爬虫平台。经过近数月的迭代,我们陆续上线了定时任务、数据分析、网站信息、可配置爬虫、自动提取字段、下载结果、上传爬虫等功能,将Crawlab打造得更加实用,更加全面,能够真正帮助用户解决爬虫管理困难的问题。 Crawlab主要解决的是大量爬虫管理困难的问题,例如需要监控上百个网站的参杂scrapy和selenium的项目不容易做到同时管理,而且命令行管理的成本非常高,还容易出错。Crawlab支持任何语言和任何框架,配合任务调度、任务监控,很容易做到对成规模的爬虫项目...阅读全文

博文 2019-07-31 21:32:37 MarvinZhang

caddy(四)Run详解

caddy(四)Run详解 前言 平时我们使用 caddy 都是使用 它的 二进制 分发文件,我们现在来分析 caddy 的 Run 函数。从最外层抽象的看它都做了些什么。 Caddy Run 我们来看看 Caddy Run 中引入了哪些包和操作,对 Caddy 的总体行为做一个概览caddy/caddymain/run.go首先看 init 函数 func init() { caddy.TrapSignals() flag.BoolVar(&certmagic.Default.Agreed, "agree", false, "Agree to the CA's Subscriber Agreement") flag.StringVar(&certmagic.Default.CA, "ca"...阅读全文

博文 2019-08-20 22:42:57 yhyddr

图解kubernetes中的api多版本机制实现

在web开发中随着版本的更新迭代,通常要在系统中维护多个版本的api,多个版本的api在数据结构上往往也各不相同,今天就来一起学习下kubernetes中的Scheme机制是如何解决这个问题的,如何借助HTTP请求里面的数据进行反序列化操作 1. web请求的处理流程 1.1 HTTP请求处理流程 通常首先是webServer先进行Http协议的处理,然后解析成基础的webServer内部的一个Http请求对象, 通常该对象持有对应请求的请求头和底层对应的字节序列(从socket流中读取)接着首先会通常根据对应的编码格式来进行反序列化,完成从字节序列到当前接口的业务模型的映射, 然后在交给业务逻辑处理,从而最终进行持久化存储, 本文的重点也就在反序列化部分 2.模型映射的实现 2.1 描述资...阅读全文

兄弟连区块链教程以太坊源码分析chain-indexer区块链索引一

chain_indexer 区块链索引 chain_indexer.go 源码解析 chain_indexer 顾名思义, 就是用来给区块链创建索引的功能。 之前在eth协议的时候,介绍过BloomIndexer的功能,其实BloomIndexer是chain_indexer的一个特殊的实现, 可以理解为派生类, 主要的功能其实实在chain_indexer这里面实现的。虽说是派生类,但是chain_indexer其实就只被BloomIndexer使用。也就是给区块链的布隆过滤器创建了索引,以便快速的响应用户的日志搜索功能。 下面就来分析这部分的代码。 数据结构 // ChainIndexerBackend defines the methods needed to process chai...阅读全文

博文 2018-10-19 10:34:39 兄弟连区块链培训

Go语言接口内部布局和方法集详解

1. 接口值内部布局   如果用户定义的类型实现了某个接口类型声明的一组方法,那么这个用户定义的类型的值就可以赋给这个接口类型的值。这个赋值会把用户定义的类型的值存入接口类型的值。赋值完成后得到的值称为接口值。接口值是一个两个字长度的数据结构,第一个字包含一个指向内部表的指针。这个内部表叫作iTable,包含了所存储的值的类型信息和与这个值相关联的一组方法(也就是方法集)。第二个字是一个指向所存储值的指针。下图展示实体值赋值后接口值的内部布局:                            实体值赋值后接口值的内部布局图 如果是一个指针赋值给接口的情况,类型信息会存储一个指向保存的类型的指针,而接口值第二个字依旧保存指向实体值的指针。如下图:                     ...阅读全文

关于interface

Golang界面全面介绍 界面介绍 如果说够程和信道是转到并发的两大基石,那么接口是转到语言编程中数据类型的关键。在去语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是转到语言中所有数据结构的核心。 去不是一种典型的面向对象的语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,进入语言引入了一种新类型 - 接口,它在效果上实现了类似于C ++的“多态”概念,虽然与C ++的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子。 虽然去语言没有类的概念,但它支持的数据类型可以定义对应的方法(或多个)。本质上说,所谓的方法(或多个)其实就是函数,只不过与普通函数相比,这类函数是作用在某个数据类型上的,所以在函数签名中,会有个接收器(接收...阅读全文

博文 2019-01-04 13:34:46 陈卧虫

用go语言实现聊天室 (WebSocket协议)

一、WebSocket协议 在实现之前,我们需要解决一个底层问题。 总所周知,HTTP协议是单向传输协议,只能由客户端主动向服务端发送信息,反之则不行。而在聊天室中,一个用户发送一条消息,服务器则需要将该条消息广播到聊天室中的所有用户,这想通过HTTP协议实现是不可能的。 除非,让每个用户每隔一段时间便请求一次服务器获取新消息。这种方式称为长轮询。但其缺点十分明显,非常消耗资源。 为了解决这个问题,WebSocket协议应运而生。 那什么是WebSocket协议呢?百度百科 WebSocket协议与HTTP协议同属于应用层协议。不同的是,WebSocket是双向传输协议,弥补了这个缺点,在该协议下,服务端也能主动向客户端发送信息。同时,一旦连接,客户端会与服务端保持长时间的通讯。 WebSo...阅读全文

博文 2019-02-21 14:34:46 Chole121

Go 命令行解析 flag 包之通过子命令实现看 go 命令源码

上篇文章 介绍了 flag 中如何扩展一个新的类型支持。本篇介绍如何使用 flag 实现子命令,总的来说,这篇才是这个系列的核心,前两篇只是铺垫。 前两篇文章链接如下: Go 命令行解析 flag 包之快速上手 Go 命令行解析 flag 包之扩展新类型 希望看完本篇文章,如果再阅读 go 命令的实现源码,至少在整体结构上不会迷失方向了。 FlagSet 正式介绍子命令的实现之前,先了解下 flag 包中的一个类型,FlagSet,它表示了一个命令。 从命令的组成要素上看,一个命令由命令名、选项 Flag 与参数三部分组成。类似如下: $ cmd --flag1 --flag2 -f=flag3 arg1 arg2 arg3 复制代码FlagSet 的定义也正符合了这一点,如下: type ...阅读全文

博文 2019-12-01 16:04:14 波罗学

Golang学习笔记-反射

反射让我们可以在运行时获取对象的类型信息,比如查看一个结构体有多少字段,查看函数的入参类型和返回值类型等。 Go提供了reflect.TypeOf()和reflect.ValueOf获取任意对象的reflect.Value和reflect.Type,其中reflect.Type是一个接口类型,该接口提供了很多方法让我们获取类型信息,而reflect.Value是一个结构体,它提供了很多方法让我们获取或者写入reflect.Value结构体中存储的数据。 获取类型信息 package main import ( "fmt" "reflect" ) type Person struct { name string height int } func (person Person) AddHeig...阅读全文

博文 2019-12-19 07:32:42 土豆吞噬者

学习使用 Go 的反射

什么是反射 大多数时候,Go中的变量,类型和函数非常简单直接。当需要一个类型、变量或者是函数时,可以直接定义它们: type Foo struct { A int B string } var x Foo func DoSomething(f Foo) { fmt.Println(f.A, f.B) } 但是有时你希望在运行时使用变量的在编写程序时还不存在的信息。比如你正在尝试将文件或网络请求中的数据映射到变量中。或者你想构建一个适用于不同类型的工具。在这种情况下,你需要使用反射。反射使您能够在运行时检查类型。它还允许您在运行时检查,修改和创建变量,函数和结构体。 Go中的反射是基于三个概念构建的:类型,种类和值(Types Kinds Values)。标准库中的reflect包提供了 Go...阅读全文

博文 2020-01-19 11:32:41 Kevin

Go+GraphQL+React+Typescript搭建简书项目(四)——用户模块(后端)

项目地址:github 概述 这一节我们将实现用户的注册登录,以及关注的后台功能 定义用户模型 在model目录下新建user.go文件。我们将和user相关的结构体都定义在里面。 package model import "time" type Gender int const ( Man Gender = iota + 1 Woman Unknown ) type UserState int const ( Unsigned UserState = iota + 1 Normal Forbidden Freeze ) type User struct { Id uint64 `graphql:"id"` Username string `graphql:"username"` Email...阅读全文

博文 2020-04-17 16:32:59 云燕

Golang学习笔记-1.3 变量

本文系第三篇Golang语言学习教程 var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。 变量声明语法如下: var 变量名 类型 = 表达式 例: var age int = 19 其中“类型”或“=表达式”两个不分可以省略其中一个。 如果省略类型,那么将根据初始表达式来确定类型信息。 如果省略=表达式,那么将用零值初始化该变量。 例1: package main import "fmt" func main() { var age = 19 //省略类型,根据自动表达式确定age类型 fmt.Println("Hello World,my age is",age) } 上面的程序将会打印: Hello World,my age is 19 例2: p...阅读全文

博文 2018-07-05 21:35:02 xunk1900

兄弟连区块链入门教程eth源码分析p2p-udp.go源码分析(二)

ping方法与pending的处理,之前谈到了pending是等待一个reply。 这里通过代码来分析是如何实现等待reply的。pending方法把pending结构体发送给addpending. 然后等待消息的处理和接收。 // ping sends a ping message to the given node and waits for a reply. func (t *udp) ping(toid NodeID, toaddr *net.UDPAddr) error { // TODO: maybe check for ReplyTo field in callback to measure RTT errc := t.pending(toid, pongPacket, fun...阅读全文

博文 2018-10-17 14:34:42 兄弟连区块链培训

Derek解读Bytom源码-启动与停止

作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 本章介绍bytom代码启动、节点初始化、及停止的过程 作者使用MacOS操作系统,其他平台也大同小异 Golang Version: 1.8 预备工作 编译安装 详细步骤见官方 bytom install 设置debug日志输出 开启debug输出文件、函数、行号等详细信息 export BYTOM_DEBUG=debug 初始化并启动bytomd 初始化 ./bytomd init --chain_id testnet bytomd目前支持两种网络,这里我们使用测试网 mainnet:主网 t...阅读全文

博文 2018-09-17 13:34:41 比原链Bytom

golang RabbiMQ简单操作

安装erlang 因为RabbitMQ是基于erlang开发的 安装RabbiMQ 上述步骤自行百度windows linux都支持 安装注意事项: erlang要和RabbiMQ版本对应上 RabbiMQ windows安装需要将.erlang.cookie改成一样的 rabbitMQ常用的命令 启动监控管理器:rabbitmq-plugins enable rabbitmq_management 关闭监控管理器:rabbitmq-plugins disable rabbitmq_management 启动rabbitmq:net start RabbitMQ 关闭rabbitmq:net stop RabbitMQ 查看所有的队列:rabbitmqctl list_queues 清除所有...阅读全文

剥开比原看代码06:比原是如何把请求区块数据的信息发出去的

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前一篇中,我们说到,当比原向其它节点请求区块数据时,BlockKeeper会发送一个BlockRequestMessage把需要的区块height告诉对方,并把该信息对应的二进制数据放入ProtocolReactor对应的sendQueue通道中,等待发送。而具体的发送细节,由于逻辑比较复杂,所以在前一篇中并未详解,放到本篇中。 由于sendQueue是一个通道,数据放进去后,到底是由谁在什么情况下取走并发送,BlockKeeper这边是不知道的。经过我们在代码中搜索,发现只有一个类型会直接...阅读全文

博文 2018-07-23 15:34:50 比原链Bytom

go语言中那样让你吃惊的东西

本文面向golang的新手,第一次接触golang时可能会吃惊的地方 1. 以大小写开头来决定一个声明是包内可见,还是包外可见 如果一个常量/变量/类型/函数 它的名称是小写字母开头,则它是一个内部的,只能在同一个包内访问。 反之它是导出到外部的。 ~/go/src/a.go package a import “b” var name = b.lower // error var name = b.Upper // correct ~/go/src/b.go package b const lower = “lower” const Upper = “Upper” 2. 函数支持多返回值。 resp, err := http.Get(url) 对于那些将运行失败看作是预期结果的函数,它们会返...阅读全文

博文 2020-02-23 23:32:45 林晨chris

剖析nsq消息队列(三) 消息传输的可靠性和持久化[二]diskqueue

剖析nsq消息队列-目录 上一篇主要说了一下nsq是如何保证消息被消费端成功消费,大概提了一下消息的持久化,--mem-queue-size 设置为 0,所有的消息将会存储到磁盘。 总有人说nsq的持久化问题,消除疑虑的方法就是阅读原码做benchmark测试,个人感觉nsq还是很靠谱的。 nsq自己实现了一个先进先出的消息文件队列go-diskqueue是把消息保存到本地文件内,很值得分析一下他的实现过程。 整体处理逻辑 go-diskqueue 会启动一个gorouting进行读写数据也就是方法ioLoop 会根据你设置的参数来进行数据的读写,流程图如下 evernotecid://D2602A6B-6F53-4199-885D-97DFC21CBA3E/appyinxiangcom/2...阅读全文

博文 2019-11-15 18:04:17 li_peng

go+typescript+graphQL+react构建简书网站(二) 编写GraphQL API

项目地址:https://github.com/unrotten/hello-world-web 开始之前,关于GraphQL的介绍 二话不说,先贴官网:https://graphql.org 如图所见,GraphQL可以分为三个部分:一是对数据的描述,称为类型系统,通过定义不同的type,来描述数据之间的关系。这其实很容易理解,可以直接类比为我们再Go中定义的struct,不同的是,在GraphQL中,每一个字段都是一个type。二是请求;在之前,我们定义了三个type,query,matutation和subscription,其实就是请求的方式。这里可以发现,其实我们所请求的东西,就是type,即我们对数据的描述。那么请求的内容也显而易见,应该是我们定义好的type。三是返回的结果;G...阅读全文

博文 2020-03-04 17:33:02 云燕

深入浅出谈以太坊智能合约

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1什么是合约? 合约是代码(它的功能)和数据(它的状态)的集合,存在于以太坊区块链的特定地址。 合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约依靠被称作以太坊虚拟机(EVM) 字节代码(以太坊特有的二进制格式)上的区块链运行。 合约很典型地用诸如Solidity等高级语言写成,然后编译成字节代码上传到区块链上。 也有其他语言可以用于编写智能合约如Serpent和LLL,在下一节会进一步阐述。去中心化应用开发资源列出了综合的开发环境,帮助你用这些语言开发的开发者工具,提供测试和部署支持等功能。 2以太坊高级语言 合约依靠被称作以太坊虚拟机(EVM) 字节代码(以太坊特有的二进制格式)上的区块链运行。然而,...阅读全文

博文 2019-09-27 17:02:46 链客

云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据

摘要: 使用过开源HBase的人都知道,运维HBase是多么复杂的事情,集群大的时候,读写压力大,配置稍微不合理一点,就可能会出现集群状态不一致的情况,糟糕一点的直接导致入库、查询某个业务表不可用, 甚至集群运行不了。 **概述** 使用过开源HBase的人都知道,运维HBase是多么复杂的事情,集群大的时候,读写压力大,配置稍微不合理一点,就可能会出现集群状态不一致的情况,糟糕一点的直接导致入库、查询某个业务表不可用, 甚至集群运行不了。在早期0.9x版本的时候,HBase的修复工具还有一下bug,使得即使你懂得如何修复的情况下,依然需要多次重复运行命令,绕过那些不合理的修复逻辑,甚至有时候需要自己写代码预先修复某个步骤。 **背景** 上周五,某公司使用的某Dat...阅读全文

区块链入门教程以太坊源码分析core-state源码分析(二)

兄弟连区块链入门教程以太坊源码分析core-state源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 ## statedb.go stateDB用来存储以太坊中关于merkle trie的所有内容。 StateDB负责缓存和存储嵌套状态。 这是检索合约和账户的一般查询界面: 数据结构 type StateDB struct { db Database // 后端的数据库 trie Trie // trie树 main account trie // This map holds 'live' objects, which will get modif...阅读全文

博文 2018-10-22 16:35:01 兄弟连区块链培训

go modules 的一些细节

前言 在一些Java的项目中,有 Maven等这些版本管理工具,可以很好的管理各种版本依赖关系,但是在 Golang 的项目中,之前官方并没有提供版本管理工具,以前都是用 go get 进行安装, 随着项目的变大, 就处理这种依赖关系就变得很麻烦, 原文 如果你对Go感兴趣, 可以关注我的公众号: GoGuider vendor 机制 为了解决版本依赖问题, 官方出了一个 vendor 机制,将项目依赖的包都放在该目录中,但这也并没有很好地管理依赖的版本。 因为vendor 机制有几个大的问题: 1、需要将外部库放到项目中, 导致项目体积变得很大 2、项目版本很难指定和控制 go dep 和 go modules 之后官方出了一个准官方版本管理工具 go dep,这也算是 go module...阅读全文

golang 将数据库转换为gorm结构

gormt 一款mysql数据库转 struct 工具,可以将mysql数据库自动生成golang sturct结构,带大驼峰命名规则。带json标签 1. 通过当前目录 config.yml 文件配置默认配置项 out_dir : "." # 输出目录 singular_table : false # 表名复数,是否大驼峰构建 参考:gorm.SingularTable simple : false #简单输出 is_json_tag : false #是否打json标记 is_foreign_key : true #是否导出外键关联 mysql_info : host : "127.0.0.1" port : 3306 username : "root" password : "qwer...阅读全文

博文 2019-12-30 16:32:40 xxjwxc

5416564

233443 ``` func (ProjectController) ReadList(ctx echo.Context) error { limit := 20 curPage := goutils.MustInt(ctx.QueryParam("p"), 1) paginator := logic.NewPaginator(curPage) paginator.SetPerPage(limit) total := logic.DefaultProject.Count(ctx, "") pageHtml := paginator.SetTotal(total).GetPageHtml(ctx.Request().URL().Path()) pageInfo := template.HTM...阅读全文

博文 2019-02-28 10:06:55 18311094065

[译] Part 30: Golang 中的Error处理

文地址:Part 30: Error Handling 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 什么是Error? Error表示程序中的异常情况。假设我们正在尝试打开文件,文件系统中不存在该文件,那么这是一种异常情况,它就代表一种error。 Go中使用内置的error类型表示错误。 就像任何其他的内置类型,如int,float64,... error可以存储在变量中,从函数返回等等。 例子 用打开了一个不存在的文件的示例程序来解释一下。 package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.txt") if err != nil { fmt.Println(err) ret...阅读全文

博文 2019-03-31 18:34:39 咔叽咔叽_7647

Go的Defer、Panic和Recover (翻译)

翻译自:https://blog.golang.org/defer-panic-and-recover Go有和语言一样常见的流程控制语句:if, for, switch, goto。同时也可以使用go语句实现在不同的goroutine中运行代码(并发)。不过,今天我们将来讨论一些少见的话题:defer、panic和recover。 Defer defer语句会将函数推入到一个列表中。同时,列表中的函数会在return语句执行后被调用。defer常常会被用来简化资源清理释放之类的操作。 举个例子,我们来观察下下面这个函数,它的主要功能是打开两个文件并将一个文件的内容拷贝到另一个文件: func CopyFile(dstName, srcName string) (written int64,...阅读全文

博文 2019-02-24 17:34:42 波罗学

Golang 源码剖析:log 标准库

Golang 源码剖析:log 标准库 日志 输出 2018/09/28 20:03:08 EDDYCJY Blog... 构成 [日期]<空格>[时分秒]<空格>[内容]<\n> 源码剖析 Logger type Logger struct { mu sync.Mutex prefix string flag int out io.Writer buf []byte } mu:互斥锁,用于确保原子的写入 prefix:每行需写入的日志前缀内容 flag:设置日志辅助信息(时间、文件名、行号)的写入。可选如下标识位: const ( Ldate = 1 << iota // value: 1 Ltime // value: 2 Lmicroseconds // value: 4 Llongf...阅读全文

博文 2019-03-26 09:30:33 EDDYCJY

IPFS 2018 Q4目标与关键结果

我们试着用科学流程来构建我们工作,该流程基于季度目标和关键结果(OKR)。其中目标反映了具有挑战性但可实现的结果。结果是切实的、可衡量的工作产出。 一、开发与支持(一)项目3、建立更好的组织,从而为整个团队提供优秀的设计(不知道为什么没有1、2)正式组建设计工作组,为其成员命名,明确工作组的工作范围列表第四季度该团队要成长出1名视觉设计师(Agata +1)第四季度该团队要成长出1名交互/前端设计师(IPFS GUI)(二)JavaScript实现1、Go IPFS的可行替代方案缺省情况下启用DHT并与Go IPFS DHT互操作在pubsub和DHT上运行IPNS完成Base32 CIDv1迁移使JS IPFS守护进程成为一个(或更多)的IPFS网关节点JS IPFS在与Go IPFS相同...阅读全文

博文 2018-10-10 12:34:50 IPFS星际社区

Go Micro Broker 源码分析

概述 在第一篇概述文章中已经提到了在Micro中 Broker的作用,Go Micro 总体设计。我们也知道Micro是一个可插拔的分布式框架,我们可以使用kafka,rabbitmq,cache,redis,nats等各种实现具体可以在git上的插件库中找到go-plugins我们再来看一下接口: type Broker interface { Init(...Option) error Options() Options Address() string Connect() error Disconnect() error Publish(topic string, m *Message, opts ...PublishOption) error Subscribe(topic stri...阅读全文

博文 2019-07-15 19:02:39 大二小的宝

面向对象的设计过程

前言 我一直认为分享的目的不是炫技。 一是,自我学习的总结。 二是,降低他人的学习成本。 三是,别人对自己学习结果的审核。 同时,本次分享有下面四个要素: 观点 本次分享的观点是一个软件工程中的思维方法,不限于编程语言 探讨 我可能理解错的,或者大家没理解的,欢迎大家积极评论,尽可能多互动,目的增加理解 理解 真的希望大家能理解 运用 最重要的,如果你觉着有帮助,一定要去在实际业务中实战 背景 工作中,几乎大家经常抱怨别人写的代码: 没法改 耦合高 无法扩展 今天就来探讨如何克服上面的问题~ 场景 首先问个问题: 平常工作中来了一个业务需求,我们是如何开始写代码的? 我推测大多数人可能: 1、梳理业务 2、设计数据库、接口、缓存 3、评审 4、于是就开始了 怎么怎么样...如果怎么怎么样.....阅读全文

博文 2019-11-18 23:03:05 TIGERB

关注你所关注的 - Golang社区调研报告

Golang语言可以说现在炙手可热,大家熟悉的Kubernates 就是使用Golang开发的。我们在最近于伦敦和圣地亚哥举行的GopherCon大会上调查了1000多名开发者,以更好地了解Go 开发社区和对Go Module的总体看法。随着最近发布的Go 1.13版本,现在是向社区分享一些有趣数据的好时机。 BTW, 在JFrog,我们也是Go开发者(JFrog CLI和Xray都是用Go编写的)。 同时也是GoLang社区的贡献者, 并为社区维护贡献了公共注册中心 Gocenter(goproxy) https://gocenter.io/. 加速Golang语言开发人员构建速度。 以下是我们学到的一些关键的东西: Go开发人员是高度投入的绝大多数的Go开发者都在使用最新版本的GoLan...阅读全文

博文 2019-12-20 22:33:11 JFrog中国

13.Go语言标准库之time包

1.time包 time包提供了时间的系那是和测量用的函数。日历的计算采用的是公历。 1.1时间类型 time.Time类型表示时间。我们可以通过time.Now()函数获取当前的事件对象,然后获取时间对象的年月日时分秒等信息。 package main import ( "fmt" "time" ) func main() { now := time.Now() //获取当前时间 fmt.Printf("current time:%v\n", now) year := now.Year() //年 month := now.Month() //月 day := now.Day() //日 hour := now.Hour() //小时 minute := now.Minute() //分钟...阅读全文

博文 2020-02-06 20:33:17 DevOperater

golang从context源码领悟接口的设计

注:写帖子时go的版本是1.12.7 Context的github地址 go语言中实现一个interface不用像其他语言一样需要显示的声明实现接口。go语言只要实现了某interface的方法就可以做类型转换。go语言没有继承的概念,只有Embedding的概念。想深入学习这些用法,阅读源码是最好的方式.Context的源码非常推荐阅读,从中可以领悟出go语言接口设计的精髓。 对外暴露Context接口 Context源码中只对外显露出一个Context接口 type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interf...阅读全文

博文 2019-07-28 23:47:37 li-peng

JVM—【01】认识JVM的内存布局和运行时数据区

1. Java 内存区域 1.1. JVM 内存布局 与 运行时数据区 JVM 内存布局 与 运行时数据区 1.2. Heap 堆 它的唯一目的就是存放对象实例;几乎所有对象实例和数组,分配内存的区域。 堆内存区域是线程共享区域,并发编程时需要考虑线程安全问题。 可以通过-Xms256M -Xmx1024M 设置堆内存大小。 注意: Java程序在运行中,堆空间会不断扩容与减少,会造成系统压力,所以一般设置为同样大小 -X: 表示运行参数 ms: 表示memory start,即起始大小 mx: 表示memory max ,即最大内存 堆分成:新生代和老年代两大块,如名字一样,对象初生在新,有一例外是新生代无法接纳的超大对象会在老年代创建 新生代:对象主要分配在新生代的Eden区域 如果在新...阅读全文

博文 2020-01-11 21:32:49 苡仁ilss

兄弟连区块链教程Fabric1.0源代码分析blockfile区块文件存储一

Fabric 1.0源代码笔记 之 blockfile(区块文件存储) 1、blockfile概述 blockfile,即Fabric区块链区块文件存储,默认目录/var/hyperledger/production/ledgersData/chains,含index和chains两个子目录。其中index为索引目录,采用leveldb实现。而chains为各ledger的区块链文件,子目录以ledgerid为名,使用文件系统实现。区块文件以blockfile_为前缀,最大大小默认64M。 blockfile,相关代码集中在common/ledger/blkstorage/fsblkstorage目录,目录结构如下: blockfile_mgr.go,blockfileMgr和checkpo...阅读全文

博文 2018-10-26 16:34:48 兄弟连区块链培训

爬取珍爱网后用户信息展示

golang爬取珍爱网,爬到了3万多用户信息,并存到了elasticsearch中,如下图,查询到了3万多用户信息。 先来看看最终效果: 利用到了go语言的html模板库: 执行模板渲染: func (s SearchResultView) Render (w io.Writer, data model.SearchResult) error { return s.template.Execute(w, data) } model.SearchResult数据结构如下: type SearchResult struct { Hits int64 Start int Query string PrevFrom int NextFrom int CurrentPage int TotalPage...阅读全文

博文 2019-10-18 10:02:37 小碗汤

基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.9.0版)

TableGo_20200520 v6.9.0 正式版发布,此次版本更新如下:1、新增对JDK9及以上版本Java环境的支持2、生成JavaBean更名为生成数据模型并且提供了C#、C++、Golang、Rust、Python、Objective-C、Swift等编程语言数据模型的简单模板3、新增生成SpringBoot项目工程的功能,在生成自定义文件界面直接生成一个可以跑起来的项目4、新增对数据库视图的支持5、新增大量自定义模板示例6、新增SQL查询导出数据功能,在生成自定义文件时通过配置SQL查询数据导出生成任何需要的文件7、新增一些内置静态对象用于生成自定义文件时使用,例如:org.apache.commons.lang.StringUtils8、移除是否目录直通,如果文件保存路径设置...阅读全文

博文 2020-05-31 22:33:14 TableGo