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

基于比原链开发Dapp(四)-bufferserver源码分析

简介 ​ 本章内容主要直接分析bufferserver源码,也就是比原链官方Dapp-demo的后端接口,里面包含了UTXO的托管逻辑、账单逻辑等,还会介绍一些改进的源码内容。 储蓄分红合约后端bufferserver源码 本次源码分析主要根据bufferserver,2019年5月13号的版本,到此3个月没有更新了。 源码分析 ​ 我们来看看bufferserver的源码,项目是用golang语言开发的web服务端,内容比较简单也就几个接口。先看看源码的结构: img 所有的golang项目首先都要看一下main.go,但是本项目有两个,因为一个是负责web的http接口的,另外一个是负责后端同步数据的。 先看看表结构,dump.sql ##基础配置表 CREATE TABLE `base...阅读全文

博文 2019-08-23 04:32:50 速易证

Golang基础(四) | 结构体

结构体 Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如下代码所示: type person struct { name string age int } 声明一个struct如此简单,上面的类型包含有两个字段 一个string类型的字段name,用来保存用户名称这个属性 一个int类型的字段age,用来保存用户年龄这个属性 具体的使用方式如下: type person struct { name string age int } var P person // P现在就是person类型的变量了 P.name = "Asta...阅读全文

博文 2020-03-06 23:32:48 youzhihua

Golang数据结构-线性表

基本概念 定义:零个或者多个数据元素的有限序列,在复杂的线性表中,一个数据元素可以由若干个数据项组成。 直接前驱元素:若线性表记为(a1a2a3...an),则表中a2领先于a3,则称a2是a3的直接前驱元素,且有且仅有一个直接前驱元素 直接后继元素:称a3是a2的直接后继元素,且有且仅有一个直接后继元素 线性表的长度:线性表的元素个数n,为线性表的长度,随着线性表插入和删除操作,该值是变动的,线性表的存储长度一般小于数组的长度 数组的长度:存放线性表的存储空间的长度,存储分配后这个值一般是不变的 空表:长度n为0时,该线性表为空表 地址:存储器的每个存储单元都有自己在内存的编号,简称为地址 线性表的存储 顺序存储结构 线性表的顺序存储结构是指用一段地址连续的存储单元依次存储线性表的数据元素...阅读全文

博文 2020-05-30 03:32:48 也疯狂

golang reflect 反射

package main import ( "fmt" "reflect" ) // reflect 反射 type Student struct { Name string `json:"name" jike:"名字"` Score int `json:"score" jike:"成绩"` } func main() { s1 := Student{ Name:"xiaomaike", Score:666, } t_obj := reflect.TypeOf(s1) // TypeOf() 查看对象类型 //fmt.Printf("%#v\n", t_obj) //fmt.Println(t_obj) //fmt.Print(t_obj.Name(), t_obj.Kind()) // 类...阅读全文

博文 2020-04-10 23:32:42 小麦客

Golang切片slice存储微探索

问题 不断将获取的信息存储进切片slice中,为了方便更新信息中的某些字段,建立了一个key和切片项地址的map,一边在切片中存储信息,一边建立Key-Value关系,导致通过key取到的值并不正确,也导致需要更新的字段没有更新,代码类似于: var dataSlice []interface{} var keyToData = make(map[string]interface{}) var id = 0 for info := fetchInfo(key) { dataSlice = append(dataSlice, info) // keyToData[key] = &info keyToData[key] = &dataSlice[id] id++ } info := keyToD...阅读全文

博文 2019-05-24 03:34:40 树袋Papa

MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案

摘要: 摘要 在SQL Server备份专题分享中,前四期我们分享了:三种常见的数据库备份、备份策略的制定、如何查找备份链以及数据库的三种恢复模式与备份之间的关系。本次月报我们分享SQL Server如何利用文件组技术来实现数据库冷热数据隔离备份的方案。 **摘要** 在SQL Server备份专题分享中,前四期我们分享了:三种常见的数据库备份、备份策略的制定、如何查找备份链以及数据库的三种恢复模式与备份之间的关系。本次月报我们分享SQL Server如何利用文件组技术来实现数据库冷热数据隔离备份的方案。 **场景引入** 假设某公司有一个非常重要的超大的数据库(超过10TB),面临如下场景: 该数据库中存储了近10年的用户支付信息(payment),非常重要 ...阅读全文

golang-nsq系列(二)--nsqd源码解析

上一篇初识了 nsq 三个模块(nsqd, nsqlookupd, nsqadmin)的 demo演示,本篇则从源码开始,一步一步去解析 nsqd 的执行流程和逻辑处理,学习别人优秀的项目架构,以期学以致用。 1. nsqd 执行入口 在 nsq/apps/nsqd/main.go 可以找到执行入口文件,如下: nsqd-path 2. nsqd 执行主逻辑源码 2.1 通过第三方 svc 包进行优雅的后台进程管理,svc.Run() -> svc.Init() -> svc.Start(),启动 nsqd 实例; func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); ...阅读全文

博文 2019-10-29 14:32:48 aside section._1OhGeD

channel 和 select 控制 goroutines

最近有一个需求是在一个常驻内存的程序中结束相关任务。在 Go 中,创建一个 goroutine 非常简单,只需要 go 一下就可以了,但是如果我创建了很多 goroutine,想要结束怎么办? 比如说我有一个死循环的例子 1234567891011121314151617181920package mainimport ("fmt" "sync" "time")func main() {queue := make(chan int, 20) var wg sync.WaitGroup for { // 就是一个死循环 queue <- 1 <-queue for i := 0; i <10; i++ {wg.Add(1) go func(i int) {time.Sleep(5 * time...阅读全文

博文 2020-02-21 10:43:38 ipfans's Blog

Go 模块--开始使用 Go Modules

Go的1.11和1.12版本包括对模块--新的Go依赖管理系统的初步支持,使依赖版本信息变得明确且更易于管理。这篇博客文章介绍了开始使用模块所需的基本操作。 模块是存储在根目录有一个 go.mod文件的文件树中的 Go 包(package)的集合。go.mod文件定义了模块的module path(也是模块根目录的导入路径)以及模块依赖的其他模块的要求,满足了依赖要求模块才能被成功构建起来。每个依赖模块的要求被写为一个模块路径和相应的模块版本。 下面展示了一个简单的go.mod文件 module example.com/hello go 1.12 require rsc.io/quote v1.5.2 从Go 1.11开始,当当前目录或任何父目录有go.mod时,只要该目录位于$GOPATH...阅读全文

博文 2020-01-05 16:32:38 Kevin

Golang 学习笔记:反射

反射(Go Reflect) 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。 反射就是在运行时动态的获取一个变量的类型信息和值信息。 每种语言的反射模型都不同,并且有些语言...阅读全文

博文 2020-06-03 14:32:50 sunlingbot

golang-nsq系列(四)--源码解析总结篇

1. 前言:为什么要使用 MQ 消息队列 随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 本文将从 MQ 比较、NSQ 介绍、源代码逻辑、亮点小结等方面进行解析,以期对 NSQ 有较为深入的理解。 2. 主流 MQ 比较 目前主流的 MQ 有 Kafka, RabbitMQ, NSQ, RocketMQ, ActiveMQ,它们的对比...阅读全文

博文 2019-12-12 00:32:40 热爱coding的稻草

MaxCompute与OSS非结构化数据读写互通(及图像处理实例)

摘要: MaxCompute作为阿里巴巴集团内部绝大多数大数据处理需求的核心计算组件,拥有强大的计算能力,随着集团内外大数据业务的不断扩展,新的数据使用场景也在不断产生。在这样的背景下,MaxCompute(ODPS)计算框架持续演化,而原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的通过新增的非结构化数据处理框架,开放给不同的外部数据。 **0\. 前言** MaxCompute作为阿里巴巴集团内部绝大多数大数据处理需求的核心计算组件,拥有强大的计算能力,随着集团内外大数据业务的不断扩展,新的数据使用场景也在不断产生。在这样的背景下,MaxCompute(ODPS)计算框架持续演化,而原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的通过新增的非结构化数据处理...阅读全文

golang post模拟客户端多文件上传以及处理

为了模拟客户端和服务器端,我这儿开了两个进程,进程A(监听地址:http://192.168.50.250:8080 路由/objects)进程B(监听地址:http://192.168.50.250:8081 路由:/objetcs)方法都是post。进程A是监听客户上传的文件,然后模拟http clien上传给进程B。在B中将文件存储或者将内容打印。 进程A post /ojects: func PostFile(c *gin.Context){ var b bytes.Buffer w := multipart.NewWriter(&b) c.Request.ParseMultipartForm(100000) multiPartform ,_:= c.MultipartForm() ...阅读全文

博文 2019-08-15 18:57:23 我的饭卡呢

图解kubernetes Kubelet驱逐管理关键实现

驱逐管理是kubelet自我保护的一种机制,当资源缺乏的时候,通过阈值和策略主动驱逐部分的Pod从而保持系统的资源水位在一个合理的范围内,本身的策略官方文档上已经写的很详细,今天只是看下其在代码上的一些设计 1. 设计臆测 1.1 驱逐总体流程 驱逐总体流程主要是通过获取当前使用资源的统计信息和当前活跃的Pod容器列表,然后结合资源阈值来决策是否需要进行Pod的驱逐 1.2 基于观察者模式的观测 在驱逐管理器中基于观察者模式实现对特殊资源驱逐管理的支持,比如内存资源,在某些情况下即时当前的资源水位没有达到阈值,也可能会触发oom killer这个时候,对应的ThresholdNotifier也会尝试进行状态同步,从而确定是否要主动的驱逐一些节点, 目前这个特性应该还没开, 同理如果这个资源有...阅读全文

博文 2020-02-25 13:34:30 8小时_2020

第三十一章:JWT与Golang

JWT基础概念 JWT是 json web token的简称 其中的 token 是令牌的意思, 其实这个令牌实质上是服务端生成的一段有规则的字符串 我们看看JWT官方自己对其的定义 JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be...阅读全文

博文 2020-04-05 20:32:50 captain89

Go语言入门(五)结构体&练习

结构体&练习 结构体 定义 Go中的面向对象是通过 struct来实现的,struct是用户自定义的类型 //定义结构体 /定义结构体 type User struct { Name string Gender string Age int AvatarUrl string } func useStruct() { //初始化结构体1 var user1 User user1.Name = "jeson" user1.Gender = "male" user1.Age = 20 user1.AvatarUrl = "http://baidu.com" //初始化结构体2 user2 := User{ Name: "miky", Gender: "female", Age: 18, } fmt...阅读全文

博文 2020-03-26 23:33:12 wx5b285b48ed74e

在 Go 语言项目中使用 Travis CI

文链接:在 Go 语言项目中使用 Travis CI Travis CI 是一种免费的持续集成服务,而 持续集成(CI, Continuous integration) 是一种软件工程流程,概括来讲就是多提交小的 Commit 来更快的发现软件的 Bug,从而提高软件质量。 本文会详细介绍如何在 Go 语言项目中使用 Travis CI。 准备工作 GitHub 账号:用于保存项目。 Travis CI 账号:点击右上角的 Sign in with GitHub 即可通过 GitHub 创建关联账号。 示例项目 hello,它包含三个文件: hello.go: package hello func Hello() string { return "Hello, World!" } hello...阅读全文

博文 2020-05-31 23:32:48 line

前端工程师吐后端工程师(第九讲)——最不擅长的数据库操作

第八讲中我们介绍了如果使用Gin写一些常用的接口,本讲我们主要介绍一下数据库如何操作。这一讲没有具体页面,可能对于前端工程师会不太习惯。首先我们要单件一个mysql数据库环境。如果不会的话可以参考这个教程https://www.jianshu.com/p/3a0de5da49f3,在搭建完成MySQL,并且启动MySQL之后。数据的管理员账户名设置成root,数据库密码设置为00000000。因为后续我们在代码中使用的数据库相关代码,会以这个为准.我们可以通过mysql -h 127.0.0.1 -P 3306 -u root -p 000000000 指令来连接刚刚搭建在本机上的数据库。127.0.0.1为本机IP,3306为数据库具体端口,root为数据库用户名,000000000为数据...阅读全文

博文 2020-01-08 19:32:47 陈辰CC老师

图解kubernetes调度器SchedulingQueue核心源码实现

SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要讨论SchedulingQueue的设计与实现的各种实现, 了解探究其内部实现与底层源码,本系列代码基于kubernets1.1.6分析而来,图解主要位于第二部分 SchedulingQueue设计 队列与优先级 队列与场景 类型 描述 通常实现 队列 普通队列是一个FIFO的数据结构,根据元素入队的次序依次出队 数组或者链表 优先级队列 优先级队列通常是指根据某些优先级策略,高优先级会优先被获取 数组或者树 其实在大多数的调度场景中,大多都是采用优先级队列来实现,优先满足优先级比较高的任务或者...阅读全文

博文 2020-01-13 11:34:24 代码仔

Docker基础(2) 实践篇

Docker基础(2) 实践篇 Docker的指令系统 全局指令 Docker仓库管理 Docker镜像管理 Dockerfile Docker容器管理 Docker Compose 命令的嵌套 Docker的指令系统 Docker指令的操作对象主要针对四个方面: 针对守护进程的系统资源设置和全局信息的获取。比如:docker info、docker deamon等。 针对Docker仓库的查询、下载操作。比如:docker search、docker pull等。 针对Docker镜像的查询、创建、删除操作。比如:docker images、docker build等。 针对Docker容器的查询、创建、开启、停止操作。比如:docker ps、docker run、docker star...阅读全文

博文 2020-03-02 01:32:39 zhixin9001

golang结构体

定义 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 结构体的定义 结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下: type struct_variable_type struct { member definition member definition ... member definition } 结构体声明格式: variable_name := structure_variable_type {value1, value2...valuen} 或 variable_name := structure_variable_type { key1: v...阅读全文

博文 2020-01-01 02:32:54 程序小白菜

图解kubernetes Kubelet驱逐管理关键实现

驱逐管理是kubelet自我保护的一种机制,当资源缺乏的时候,通过阈值和策略主动驱逐部分的Pod从而保持系统的资源水位在一个合理的范围内,本身的策略官方文档上已经写的很详细,今天只是看下其在代码上的一些设计 1. 设计臆测 1.1 驱逐总体流程 驱逐总体流程主要是通过获取当前使用资源的统计信息和当前活跃的Pod容器列表,然后结合资源阈值来决策是否需要进行Pod的驱逐 1.2 基于观察者模式的观测 在驱逐管理器中基于观察者模式实现对特殊资源驱逐管理的支持,比如内存资源,在某些情况下即时当前的资源水位没有达到阈值,也可能会触发oom killer这个时候,对应的ThresholdNotifier也会尝试进行状态同步,从而确定是否要主动的驱逐一些节点, 目前这个特性应该还没开, 同理如果这个资源有...阅读全文

Nsq原理分析(二)

在上一篇文章中对nsq进行了简单的介绍,从nsq 的golang的客户端代码分析了一下nsq的使用,这篇文章会分析nsqd的代码 Nsqd代码分析 nsqd做了什么 nsqd接收对topic、channel的创建以及对消息的存储和分发 nsqd向nsqlookup注册自己的服务信息,ip 和端口,向nsqlookup注册自己的元数据信息(topic、channel),nsqd也会向nsqdlook查询topic、和channel信息 nsqadmin 是一个简单的管理界面,通过它可以查询topic、channel、消费者等等一些基本信息,nsqadmin是从 nsqlookup中获取信息的,通过nsqadmin也可以创建topic、channel,创建到了nsqlookup中,在nsqloo...阅读全文

博文 2020-05-29 22:32:44 朱伟

图解kubernetes Pod生命周期事件生成器

PLEG(PodLifecycleEventGenerator)主要是用于周期性检测Pod的运行状态,从而对比Pod前后状态生成事件从而触发kubelet进行Pod容器状态的校证,让我们一起来初探下其内部实现机制 1. 图解设计 1.1 Pod事件生成 Pod事件生成主要是根据对应Pod前后的状态对比来实现,首先通过runtime来获取当前节点的所有Pod的列表,并将对应的状态进行保存,这样在下一个轮训周期就可以通过前后状态的对比去发现状态发生改变的Pod的容器,并且产生对应的事件 1.2 事件通知与状态同步 Pod事件生成之后会通过管道将对应的事件同步给状态同步线程,状态同步线程感知到Pod的变更事件后,会与Pod的目标状态进行对比同步,并调用Runtime来进行最终校证操作的执行,同时在...阅读全文

2.7 Socket Programming: Creating Network Applications

在网络应用开发中,开发者首先要做的一个决定是使用 TCP 还是 UDP 作为传输层协议。TCP 是基于连接,并且基于字节流提供可靠的数据传输的协议。而 UDP 是无连接,通过数据包发送数据,并不保证送达的协议。 我们将在这一节分别利用 UDP 和 TCP 实现一套 client-server 程序。 该程序主要完成的功能是: client 从键盘读取一行字符串,并发给 server server 收到字符串并转换成大写 server 将修改后的字符串发送给 client client 收到修改后的数据并显示 2.7.1 Socket Programming with UDP UDP 在发送数据包时,需要先在数据包中附加地址的信息。网络会利用这个信息 route 数据包到达接收程序。 附加的地...阅读全文

博文 2020-05-13 03:32:47 找不到工作

在 Go 语言项目中使用 Travis CI

文链接:在 Go 语言项目中使用 Travis CI Travis CI 是一种免费的持续集成服务,而 持续集成(CI, Continuous integration) 是一种软件工程流程,概括来讲就是多提交小的 Commit 来更快的发现软件的 Bug,从而提高软件质量。 本文会详细介绍如何在 Go 语言项目中使用 Travis CI。 Travis CI logo 准备工作 GitHub 账号:用于保存项目。 Travis CI 账号:点击右上角的 Sign in with GitHub 即可通过 GitHub 创建关联账号。 示例项目 hello,它包含三个文件: hello.go: package hello func Hello() string { return "Hello, ...阅读全文

博文 2020-05-31 21:34:47 sulinehk

图解kubernetes调度器SchedulingQueue核心源码实现

SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要讨论SchedulingQueue的设计与实现的各种实现, 了解探究其内部实现与底层源码,本系列代码基于kubernets1.1.6分析而来 SchedulingQueue设计 队列与优先级 队列与场景 类型 描述 通常实现 队列 普通队列是一个FIFO的数据结构,根据元素入队的次序依次出队 数组或者链表 优先级队列 优先级队列通常是指根据某些优先级策略,高优先级会优先被获取 数组或者树 其实在大多数的调度场景中,大多都是采用优先级队列来实现,优先满足优先级比较高的任务或者需求,从而减少后续高优...阅读全文

博文 2020-01-13 13:32:42 仔仔