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

[转载]MMO网络游戏服务器中mysql数据库访问的性能优化探讨

问题: 和一些做mmo大型网络游戏服务器端的人讨论了一些mysql数据库访问的问题,因为我本人没有实际开发大型网游的经验,所以他们说的我也理解的不深,我还是努力理解,但还是觉得他们所谈的好象并不是那么一回事; mysql数据库的访问一般就通过他提供的c api接口访问就可以了,网络游戏服务器端事先和mysql建立并保持1个或者几个连接,正常情况下这些连接将一直保持; 为提高性能,网络游戏服务器程序启动后一般都会把事先需要的数据从数据库提取到内存供使用,以减少读数据库的频率,这到好理解; 当然,网游开发中,遇到需要立即写库或者更新库的内容时,我们会立即向数据库服务器发送insert,delete,update等以期望数据库能立即更新我们的数据,比如玩家切换到新地图,这种数据就有必要立即提交到数...阅读全文

博文 2019-01-01 12:34:45 Golang语言社区

Go 编译器内部知识:向 Go 添加新语句-第 2 部分

这是探讨 Go 编译器两篇文章的最后一篇。在[第 1 部分中](https://studygolang.com/articles/25101),我们通过构建自定义的编译器,向 Go 语言添加了一条新语句。为此,我们按照此图介绍了编译器的前五个阶段: ![go compiler flow](https://raw.githubusercontent.com/studygolang/gctt-images/master/compiler-internal/go-compiler-flow.png) 在"rewrite AST"阶段前,我们实现了 until 到 for 的转换;具体来说,在[gc/walk.go](https://github.com/golang/go/blob/master/...阅读全文

博文 2020-03-12 22:40:36 polaris

go自定义一个定时器

### 定时器 + [查找更多案例](http://www.5lmh.com/ "查找更多案例") + Timer:时间到了,执行只执行1次 ```go package main import ( "fmt" "time" ) func main() { // 1.timer基本使用 //timer1 := time.NewTimer(2 * time.Second) //t1 := time.Now() //fmt.Printf("t1:%v\n", t1) //t2 := <-timer1.C //fmt.Printf("t2:%v\n", t2) // 2.验证timer只能响应1次 //timer2 := time.NewTimer(time.Second) //for { // <...阅读全文

博文 2019-11-27 16:44:33 lu569368

Golang bytes.buffer详解

Buffer 介绍 Buffer 是 bytes 包中的一个 type Buffer struct{…} A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use. (是一个变长的 buffer,具有 Read 和Write 方法。 Buffer 的 零值 是一个 空的 buffer,但是可以使用) Buffer 就像一个集装箱容器,可以存东西,取东西(存取数据) 创建缓冲器 func main() { buf1 := bytes.NewBufferString("hello") buf2...阅读全文

博文 2019-01-28 15:34:49 小马哥_Magical

菜鸟求助:关于goroutine问题

现需要设计一款SNMP采集器,采集共约50台机器的数据,每台机器上有若干指标值需采集,且每个指标值需独立设置采集周期,我设想的是使用goroutine对50台机器进行并发采集,其中对每项指标采集也使用goroutine,请大牛们赐教,这样的goroutine嵌套能实现吗?P.S.新手上路,求...阅读全文

徒手写一个JSON解析器(Golang)

前一阵子看到了一个Golang的JSON库go-simplejson,用来封装与解析匿名的JSON,说白了就是用map或者slice等来解析JSON,觉得挺好玩,后来有个项目恰好要解析JSON,于是就试了试,不小心看了一眼源代码,发现竟然是用的Golang自带的encoding/json库去做的解析,而其本身只是把这个库封装了一层,看起来更好看罢了。于是心想能不能徒手写一个解析器,毕竟写了这么多年代码了,也JSON.parse,JSON.stringify了无数次。捣腾了两天,终于成了,测试了一下,性能比自带的库要高很多,速度基本上在1.6到7倍之间(视JSON串的大小和结构而定),所以决定写这篇文章分享一下思路。 先插一个段子,作为一个已经完完整整写了将近三年代码的老码农,前一段面试,不止...阅读全文

博文 2017-07-24 18:06:46 一路行歌

使用Envoy 作Sidecar Proxy的微服务模式-5.rate limiter

本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接): 断路器(第一部分) 重试/超时(第二部分) 分布式跟踪(第三部分) Prometheus的指标收集(第四部分) rate limiter(第五部分) 第五部分 - rate limiter Envoy ratelimit filters Envoy通过两个过滤器与Ratelimit服务集成: Network Level Filter: envoy为安装过滤器的侦听器上的每个新连接调用Ratelimit服务。这样,您可以对通过侦听器的每秒连接进行速率限制。 HTTP Level Filter:Envoy为安装过滤器的侦听器上...阅读全文

博文 2019-03-01 21:34:40 iyacontrol

Go语言学习笔记(七)之方法

在面对对象编程(OOP),我们常把某个对象实现的具体行为的函数称作方法。例如 C++中A类的某个函数实现了某种行为,我们就叫做 A 的方法。在 golang 中如果要定义一个方法,只需要在函数声明时,在函数名前加上某个变量,即该变量实现了某个方法。 方法声明 type Point struct{ X, Y float64 } //按照传统方法,我们可能会按照下面的方式来写 func Distance(p, q Point) float64 { return math.Hypot(q.X - p.X, q.Y - p.Y) } //但在 go 语言中则是这样 func (p Point) Distance(q Point) float64 { return math.Hypot(q.X-p.X...阅读全文

博文 2019-04-13 16:34:40 程序员Morgan

聊聊在Go语言里使用继承的翻车经历

Go不是面向对象的语言,但是使用组合、嵌套和接口可以支持代码的复用和多态。关于结构体嵌套:外层结构体类型通过匿名嵌套一个已命名的结构体类型后就可以获得匿名成员类型的所有导出成员,而且也获得了该类型导出的全部的方法。比如下面这个例子: type ShapeInterface interface { GetName() string } type Shape struct { name string } func (s *Shape) GetName() string { return s.name } type Rectangle struct { Shape w, h float64 } Shape类型上定义了GetName()方法,而在矩形Rectangle的定义中匿名嵌套了Shape类型...阅读全文

博文 2020-04-20 13:32:43 Kevin

golang goroutine_并发

并发:一箭多发 并行:同一时刻一起执行(齐头并进) 例子: package main import ( "fmt" "sync" ) // goroutine 多任务操作 var wg sync.WaitGroup // 声明一个全局的 wg 计数器对象[上下文管理器] (WaitGroup 结构体类型) func fun1(i int) { defer wg.Done() // 延迟调用,当次函数将要执行完毕时调用 fmt.Println(i) } func main() { for i := 0; i < 100; i++{ // 每次循环开启一个新的线程执行一个匿名函数 wg.Add(1) //go func(i int){ // 匿名函数 // defer wg.Done() // ...阅读全文

博文 2020-04-17 23:32:47 小麦客

minikube mac 运行记

得到了错误信息 minikube start image.png 进入minikube github 官网 https://github.com/kubernetes/minikube 在 minikubhe docs 中 https://minikube.sigs.k8s.io/docs/start/macos/ image.png minikube start --vm-driver=virtualbox //估计跑很久很久吧 157517584167110414 我的界面卡在这一步,等一下排除原因 快速入门给你的几个命令行 kubectl get po -A minikube config set memory 4096 下一步就是 exmplate https://minikube....阅读全文

Rabbitmq 简单介绍,安装和go客户端使用

Rabbitmq 简单介绍,安装和go客户端使用 1,消息队列介绍 1.1 什么是消息队列? 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。消息队列,一般我们会简称他为MQ(Message Queue),消息队列可以简单的理解为:把要传输的数据放在队列中 说明: Producer:消息生产者,负责产生和发送消息到 Broker; Broker:消息处理中心。负责消息存储、确认、重试等,一...阅读全文

博文 2019-09-14 00:03:10 铁血军人

async.waterfall变为async/await

1. 我的工作主要是pomelo node.js后端主程,因为之前经常用async.waterfall 这个第三方async库,并且这个库也很好用,就是代码有些多,后来换工作了公司用了新框架。2. 开始大量使用async/await来开发, 或者用promise或者其他的东西,主要目的就是为了解决低于地狱回调的问题。3. 使用async/await的过程中发现一个问题,因为服务器端开发,所以对错误是很敏感的,并不允许有错误,而不去管它,当时能想到的方案有两个。其一:对用到 await的地方用try catch 方法一 其二是: 方法二 如果有多个await的话,每个都用try catch那样体验很不好,所以我经常在项目中用到的就是方法二,但是方法二也不是很好。然后我在网上找了找,还有一种方法...阅读全文

博文 2020-02-10 23:32:52 夏伊馨

Go 译文之词法分析与解析

作者:Adam Presley | 地址:Writing a Lexer and Parser in Go - Part 1 译者前言 一直对词法分析与解析的话题比较感兴趣,最近发现了好几篇相关的优秀文章,准备好好翻译和研究下。我的理解,词法分析与解析的应用还是比较广泛的,无论简单的配置文件、各种模板语言、还是我们每天在写编程语言都离不开它。 本篇文章一个系列文章的第一篇,主要介绍的是词法分析与解析的一些基础概念,包括什么是词法分析,什么是解析,Token 如何表示等等。 正文如下: 从今天开始,我将会用三篇文章介绍在 Go 中如何构建一个简单的词法分析与解释器。文中介绍的内容主要是基于 Rob Pike 在 2011 年关于 Lexical Scanning In Go 的演讲。这个系列文...阅读全文

博文 2019-08-01 10:32:41 波罗学

Android OKHttp系列5-ConnectInterceptor

文章将会被同步至微信公众号:Android部落格 Android OKHttp系列皆为本人原创文章,未经允许严禁转载 概述 选定连接接口,并开始连接目标 流程图如下: okhttp-ConnectInterceptor.jpg 原图片地址:http://i66.tinypic.com/rjqglx.jpg 1、找RealConnection 选择合适的HttpCodec,为什么要选择呢?因为涉及到Http版本的问题,此处需要兼容,先看代码: boolean doExtensiveHealthChecks = !request.method().equals("GET"); HttpCodec httpCodec = streamAllocation.newStream(client, cha...阅读全文

如何设计一个微型分布式架构?

序言(初衷) 设计该系统初衷是基于描绘业务(或机器集群)存储模型,分析代理缓存服务器磁盘存储与回源率的关系。系统意义是在腾讯云成本优化过程中,量化指导机房设备扩容。前半部分是介绍背景,对CDN缓存模型做一些理论思考。后半部分会实际操作搭建一个微型但是五脏俱全的分布式通用系统架构,最后赋予该系统一些跟背景相关的功能,解决成本优化中遇到的实际问题。缓存服务器存储模型架构(背景): 图1 存储模型腾讯CDN的线上路由是用户à分布于各地区各运营商的OC->SOC->SMid->源站。各个层级节点部署的都是缓存服务器。来自用户的部分请求流量命中服务器,另一部分产生回源流量。随着业务带宽自然增长,用户端带宽增长,假设业务回源率不变的情况下,磁盘缓存淘汰更新(淘汰)速率变快,表现为以下业务瓶颈(iowai...阅读全文

博文 2018-09-28 18:34:42 Java架构007

Golang学习笔记5——数组array

1.array的定义 定义数组的格式: var a[4]int //元素自动初始化为零 a := [...]int{19:1} //编译器按照初始化值数量确定数组长度 a := [5]int{1,2} //未提供初始值的元素自动初始化为零 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 数组在go中为值类型 2.数组指针和指针数组 //数组指针是指获取数组变量的地址。 //此时变量p就是指向数组的指针。特别注意p定义的类型为长度为100的数组的指针。 长度必须相等才能赋值。 func main() { var a = [...]int{99:1} var p *[100]int = &a fmt.Println(p) } //指针数组是指元素为指针类型的数组 func main(...阅读全文

博文 2017-10-22 09:04:44 MarksGui

Golang学习笔记1--开发环境准备

系统:Mac编辑器:Sublime text 3+gosublime(1)go语言安装Golang中国下载:https://www.golangtc.com/download本文在编写的时候,使用的版本是:go1.9.darwin-amd64.pkg,下载后直接安装就行,安装完开一个终端,输入:go version可以查看是否安装成功安装完后需要配置环境变量export GOPATH=/Users/lihan/Develop/golang/workspaceexport GOBIN=$GOPATH/binexport PATH=$PATH:$GOBIN(2)安装sublime Text 3中的package install去网上搜索此类相关的教程(3)通过package install安装g...阅读全文

博文 2017-09-17 15:34:49 Harry_li

详解SLB、EIP、NAT网关之间区别, 合理选择云上公网入口

摘要: 概述 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? **点此查看原文:http://click.aliyun.com/m/41840/** **开始** 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? 概念 -- **负载均衡SLB** **对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。** 可见云计算中的负载均衡除了通过流量分发让后端的服务器负载均衡,还有两个重...阅读全文

理解Kubernetes网络:services篇

在本系列的第一篇文章中,研究了kubernetes如何结合使用虚拟网络设备和路由规则,以允许在一个群集节点上运行的Pod与在另一个群集节点上运行的Pod通信,只要发送者知道接收者的Pod网络即可。 IP地址。如果您还不熟悉Pod的交流方式,那么在继续之前值得一读。集群中的Pod网络很简单,但仅凭其不足以创建持久性系统。那是因为kubernetes中的Pod是短暂的。您可以将Pod IP地址用作终结点,但不能保证该地址在下次重新创建Pod时不会更改,这可能由于多种原因而发生。 您可能已经意识到这是一个老问题,并且它有一个标准的解决方案:通过反向代理/负载均衡器运行流量。客户端连接到代理,代理负责维护将请求转发到的健康服务器列表。这对代理服务器提出了一些要求:代理服务器本身必须是耐用的并且能够抗...阅读全文

Spring Boot(十三)RabbitMQ安装与集成

一、前言 RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列,异步接收和发送消息,MQ的全程是:Message Queue中文的意思是消息队列。 1.1 使用场景 削峰填谷:用于应对间歇性流量提升对于系统的“破坏”,比如秒杀活动,可以把请求先发送到消息队列在平滑的交由系统去处理,当访问量大于一定数量的时候,还可以直接屏蔽后续操作,给前台的用户友好的显示; 延迟处理:可以进行事件后置,比如订单超时业务,用户下单30分钟未支付取消订单; 系统解耦:消息队列也可以帮开发人员完成业务的解耦,比如用户上传头像的功能,最初的设计是用户上传完之后才能发帖,后面有增加了经验系统,需要在上传头像之后增加经验值,到后来又上线了金币系统,上传头像之后可以增加金币,像这种需求...阅读全文

博文 2018-11-13 13:34:41 王磊的博客

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-08-30 03:00:04 htyu_0203_39

Mac快搭Go环境

1. 下载安装go语言安装包进入https://golang.org/dl/ 选择下载.pkg 直接双击.pkg文件即可,这里安装路径默认方便后续环境配置2. 配置环境打开iTerm终端查看隐藏文件ls -a若不存在文件 .bash_profile就新建touch .bash_profile进入文件vim .bash_profile编辑文件i添加代码 export GOPATH=/Users/guoyu/go export GOBIN=$GOPATH/bin export PATH=$PATH:$GOBIN 需要注意的是GOPATH=/Users/用户/go,用户修改为mac登录用户结束编辑Esc保存推出:wq使配置文件生效source .bash_profile3. 下载编辑器开始上手进入...阅读全文

博文 2019-01-10 12:34:39 郭禹_7639

一个简单的Golang实现的HTTP Proxy

最近因为换了Mac,以前的Linux基本上不再使用了,但是我的SS代理还得用。SS代理大家都了解,一个很NB的Socket代理工具,但是就是因为他是Socket的,想用HTTP代理的时候很不方便。 以前在Linux下的时候,会安装一个Privoxy把Socket代理转换为HTTP代理,开机启动,也比较方便。但是Mac下使用Brew安装的Privoxy就很难用,再加上以前一个有个想法,一个软件搞定Socket和HTTP代理,这样就不用安装一个单独的软件做转换了。 想着就开始做吧,以前基本上没有搞过太多的网络编程,最近也正好在研究Go,正好练练手。 我们这里主要讲使用HTTP/1.1协议中的CONNECT方法建立起来的隧道连接,实现的HTTP Proxy。这种代理的好处就是不用知道客户端请求的数...阅读全文

博文 2017-07-04 02:14:59 飞雪无情

数据抓取使用HTTP代理ip代码示例

HTTP Proxy Demo 代码1、Python#! -- encoding:utf-8 --import requests# 要访问的目标页面targetUrl = "http://ip.hahado.cn/ip"# 代理服务器proxyHost = "ip.hahado.cn"proxyPort = "39010"# 代理隧道验证信息proxyUser = "username"proxyPass = "password"proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, "user" : proxyUser, "pass" : prox...阅读全文

19年第34周:Go 搭建迷你服务器

一,效果 服务器返回了一张图片 二,Golang代码 package main import ( "fmt" "./models" "log" "net/http" ) func main(){ // 1, 迷你服务器 http.HandleFunc("/", handler) // 注册函数 类似于 路由管理 urls.py http.HandleFunc("/sanhuo", handlerLisa) // 注册函数 log.Fatal(http.ListenAndServe("localhost:8000", nil)) // 服务器启动 } // 1, "/" 的回调函数 类似于Django的 视图 views.py func handler(w http.ResponseWrite...阅读全文

博文 2019-08-22 02:32:46 习惯研究所所长

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-09-03 16:00:07 htyu_0203_39

从nginx热更新聊一聊Golang中的服务器热更新(上)

静态语言在服务器编程时都会遇到这样的问题:如何保证已有的连接服务不中断同时又升级版本?最近花了点时间看了下nginx热更新代码流程,想了下结合之前的经验一并总结下热更新1. 热更新是什么?简单翻译成人类可读的实例是如下这个样子:举个例子,你现在在坐卡车,卡车开到了150KM/H然后,有个轮胎,爆了然后,司机说,你就直接换吧,我不停车。你小心点换嗯。就这个意思2.网关中的热更新服务程序热更新这个问题在层7网关中尤其严重,网关中承载着大量的请求,包括HTTP/HTTPS短连接、HTTP/HTTPS长连接、甚至是websocket这种超长连接(websocket通常连接时间会很长,十几分钟到几天不等)。这样的话我们势必不能讲服务程序停止再启动的冷更新,服务进程热更新是非常有必要的。网关作为一个基础...阅读全文

博文 2019-03-18 14:09:39 Lateautunm​

RabbitMQ系列笔记广播模式和路由模式

导语 上一节介绍了简单的工作模式,即一个队列可以被多个消费者进行消费,只有一条消息被送到消费者,采用公平调度的方式,在以往的例子中似乎我们还没用到交换器进行发送消息,我们都知道,往队列里发送消息,是需要用交换器进行分发的消息的,为什么我们没有申请交换器仍然可以发送消息呢?因为在RabbitMQ服务器中,如果不申请交换器,服务器会使用默认的交换器,所以说,交换器在发送消息的时候必不可少,今天我们学习两种交换器分别为fanout(扇形交换器)和direct(直连交换器) 扇形交换器(日志记录器) 特性 分发消息到与之绑定的所有队列,发送消息到交换器时会忽略routing key(路由),我们可以称它为广播消息。 生产者 申请交换器 指定交换器的名字 指定交换器的类型 err = ch.Excha...阅读全文

博文 2019-08-10 16:32:47 陌无崖

Hyperledger Fabric协议的定制之protocol buffer

前言以前也研究过这个protobuf这一语言标准,这一google开发的用来网络协议指定的标准。这次再遇到这里就着研究fabric的机会深入的说明一下。用这个进行协议的指定是比较节约网络带宽,编解码方便。下面我们就从数据类型和编解码方式两个方面来加以说明。通过本文的阅读你将会发现,利用好protobuf有利于你提高程序编写的效率和减少协议指定的繁杂性。特别是如果你要设计的是一个网络系统的时候。1、protobuf的关键字和数据类型针对不同的程序语言(C++,java,golang)有不同的protobuf解析器,但是他们的数据类型是一样的,关键字略有差别。这里我们以golang和protoc-gen-go解析器为例来进行说明。protocol buffer 语言的源文件一般以name.pro...阅读全文

博文 2020-04-30 03:32:47 刨根问底儿

安装 golang 最简易教程

1. 安装 golang到 golang.org 官网下载最新版的golang, Leanote至少需要golang 1.7。如果被墙, 可以在 http://golangtc.com/download 下载。以下为 1.8 版本的快速下载链接:linux 64位: http://www.golangtc.com/static/go/1.8/go1.8.darwin-amd64.pkglinux 32位: http://www.golangtc.com/static/go/1.8/go1.8.linux-386.tar.gz假设将文件下载到 /home/user1 下, 解压文件:$> cd /home/user1$> tar -xzvf go1.6.linux-amd64.tar.gz在 ...阅读全文

博文 2018-09-13 13:34:39 麦子时光_新浪微博

用Go实现Redis之四实现Redis的协议交互

写在前面 本文实现的Godis代码版本为:v0.0.3 在前三篇文章中,实现了客户端/服务端的交互(基于textprotoco)、服务端初始化和get/set命令。如果阅读过或者调试过粗略的代码实现,会发现使用文本协议进行交互,除了容易阅读之外,解析效率是比较低下的。因为我们的示例是"set alpha 123n",工整的单个空格和n分割,可能在分割上效率还好;既要分割,不免低效。 在本文,将替换文本协议为Redis1.2版本后的统一协议。 Redis通信协议 Redis通信协议解析高效、二进制安全,同时也对人类友好(可直接阅读解析)。 协议格式 Redis在发送命令和返回结果中均使用同一套标准协议。Reids协议“肉眼可辨”,在发送命令是使用类型为"multi bulk reply"的协议...阅读全文

博文 2018-06-18 15:34:41 alphali

Go之URL Query String 编码器和解码器

项目地址 https://github.com/hetiansu5/... 简介 使用Go语言实现的URL Query字符串编码器和解码器。写好后才发现官方已有实现的querystring,但只实现了编码器,没有解码器,且只支持顶层数据结构为结构体,实现上不算特别完善。 特性 支持丰富的Go数据结构互转: 基础数据类型: 有符号整型[8,16,32,64] 无符号整形[8,16,32,64] 字符串 布尔值 浮点型[32,64] 字节 字面量 复合数据类型: 数组 切片 哈希 结构体 嵌套结构体 支持顶层的数据结构为数组 切片 哈希,不仅仅是结构体 支持自定义的URL-Encode编码规则,支持全局、局部设置方式,支持默认规则 支持自定义的键名映射规则(结构体Tag示例:query:"nam...阅读全文

在eclipse中安装go编辑器阅读fabric代码

参考资料 由于fabric采用go语言编写,故需要安装go环境。 安装要求: Java VM version 8 or later. Eclipse 4.6 (Neon) or later. 1. JDK安装1.8以上+Eclipse 安装过程省略 2.安装go环境 https://golang.org/ 进入go的官网,下载对应的安装包。本例子下载的是go1.8.3.windows-amd64.zip 解压到E:\fabric\go目录。 3.在eclipse中安装GoClipse help->Eclipse Marketplace->检索GoClipse,检索到以后直接安装即可 安装后重...阅读全文

博文 2017-07-05 16:00:06 maobuji

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-08-30 02:00:12 htyu_0203_39

Go语言sync库和WaitGroup的使用

// code_041_sync_WaitGroup project main.go package main import ( "fmt" "sync" ) func main() { fmt.Println("Hello World!") var wg sync.WaitGroup wg.Add(2) go func() { defer wg.Done() for i := 0; i < 10000; i++ { fmt.Printf("Hello,Go.This is %d\n", i) } }() go func() { defer wg.Done() for i := 0; i < 10000; i++ { fmt.Printf("Hello, world.This is %d\n...阅读全文

Golang——socket

socket 图片.png 客户端代码 package main import ( "bufio" "fmt" "io" "net" "time" ) func main() { var tcpAddr *net.TCPAddr tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999") conn,err := net.DialTCP("tcp",nil,tcpAddr) if err!=nil { fmt.Println("Client connect error ! " + err.Error()) return }else { fmt.Println(conn.LocalAddr().String() + "客户端连接成功!") } d...阅读全文

博文 2019-04-05 02:34:39 羊羽share

Go语言实践_实现一(客户端)对一(服务器端)聊天室

一、目的 使用Go语言实现一个服务器端与客户端的聊天室。 软件:Goland,Go1.9 代码仓库地址 二、思路 1,首先启动服务器端,使用listen_socket函数监听IP地址上的客户端连接; 2,启动客户端,并向服务器端发送数据,发送结束后端口阻塞,等待服务器端的消息; 3,服务器端接收到由客户端发送来的消息; 4,服务器端向客户端发送数据,发送结束后; 5,客户端接收到由服务器端发送来的消息,发送结束后端口阻塞,等待客户端的消息; 6,重复步骤2-5; 7,如果服务器端接收到由客户端发送来的“close"消息后,服务器端关闭与客户端的连接,继续等待下一个客户端的连接; 8,客户端关闭,聊天结束。 三、Go代码实现 Sever端 // One-to-one ChatRoom Seve...阅读全文

博文 2018-08-08 00:30:00 OctoptusLian

游戏分布式服务器 gonet

gonet 游戏服务器架构,mmo架构,分布式snowflake64为整形uuid,ai行为树,配置data,游戏大部分都在内存运算,分布式缓存redis。设计之初,建立在actor模式下的;rpc,以及消息驱动,rpc无需注册,支持int,数据,struct(struct必须要注册结构题即可);sql封装简单的orm,具体看demowebsocket模式下,要在net,websocket注视掉如下代码:https://studygolang.com/articles/14842代码除了mysql,protobuf,redis这几个第三方库以外,其他都是自己写的,方便性能和修改,主动权在自己手里服务器之间rpc,客户端服务器之间protobuf + rpc,客户端tcp遵从如下消息包头前四位...阅读全文

博文 2019-03-11 19:34:45 bobohume

golang中crypto/elliptic包

elliptic包实现了几条覆盖素数有限域的标准椭圆曲线。 type Curve type Curve interface { // Params返回椭圆曲线的参数 Params() *CurveParams // IsOnCurve判断一个点是否在椭圆曲线上 IsOnCurve(x, y *big.Int) bool // 返回点(x1,y1)和点(x2,y2)相加的结果 Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int) // 返回2*(x,y),即(x,y)+(x,y) Double(x1, y1 *big.Int) (x, y *big.Int) // k是一个大端在前格式的数字,返回k*(Bx,By) ScalarMult(x1, y1 *bi...阅读全文

博文 2018-12-09 14:34:43 laijh

美美的小程序开发之路--20190331

类和继承 在面向对象的编程语言中存在“类”的概念,类就表示数据的类型,比如说People类;继承是指某个类是由另一个类派生出来的。生成的新类是子类,被继承的类是父类。 JS中的“var” 在某一类编程语言中会采用动态类型,是指编码时不要求指定变量类型,实际的变量类型由编译器/解释器在加载程序时动态分配。在JavaScript中用var声明变量,用let声明常量。 nil,null和undefined 通常声明变量的步骤为var a_varible = null;这里表示变量a_varible的值初始化时是空的,即null;在某些语言中是nil,比如Objective-C,Golang。有时声明变量也可以写成var a_varible,在JavaScript中,此时的变量值是undefined...阅读全文

博文 2019-04-01 18:34:41 原鸣清

【go】用Golang的 http 包建立 Web 服务器

web.go package main import ( "fmt" "log" "net/http" "strings" ) func sayhello(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数, 默认是不会解析的 fmt.Println(r.Form) //这些是服务器端的打印信息 fmt.Println("path", r.URL.Path) fmt.Println("scheme", r.URL.Scheme) fmt.Println(r.Form["url_long"]) for k, v := range r.Form { fmt.Println("key:", k) fmt.Println("v...阅读全文

博文 2017-09-13 05:30:01 richerdyoung

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-08-30 04:00:02 htyu_0203_39

简谈GO语言I/O操作

1.格式化输出 fmt.Printf() 输出到控制台.fmt.PrintLn()输出到控制台并换行。str := fmt.Sprintf("%f", 3.1415926)格式化后返回格式化后的字符串。fmt.FprintLn(os.Stdout, "hello world")格式化输出到输出ioWrite上(控制台、文件、网络请求等)更多操作请见https://studygolang.com/stati... 2.基本IO 读取器函数 func ReadFrom(reader io.Reader, num int )([]byte, error){ p := make([]byte, num) n, err := reader.Read(p) if n>0 { return p[:n], ...阅读全文

博文 2020-02-18 17:32:41 威客巴拉

官方博文:2019 年 Go 开发者调查结果

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言Todd Kulesza 2020-04-20概览、感谢 首先,我要非常感谢参与本次调查的数千名 Go 开发人员。在 2019 年,我们收到了 10,975 份回复,几乎是去年的两倍![1]我要代表团队的其他成员,充分强调您花时间和精力向我们介绍您在 Go 方面的经验,我们对此深表感谢。谢谢!关于前几年调查说明 敏锐的读者可能会注意到,我们每年的比较与我们过去分享的数字不太吻合。原因是从 2016 年至 2018 年,我们使用开始调查的总人数作为分母来计算每个问题的百分比。尽管这很不错而且很一致,但它忽略了并非每个人都会完成调查的事实——多达 40% 的参与者在到达最后一页之前就停止了调查,这意味着在调查的后面出现的...阅读全文

博文 2020-04-26 10:36:01 Go语言中文网

SSMP 服务器加载测试工具 ssmperf

ssmperf 是 SSMP 协议的服务器基础加载测试工具。 使用

./ssmperf <address> [flags]
  -cacert=""        path to CA cert
  -cert=""          path to client cert
  -conn=100         number of client connections
  -count=10000      number of messages sent per connection
  -cpuprofile=""    write cpu profile to file
  -insecure=false   d...阅读全文

JVM—【02】认识JVM的垃圾回收算法与收集器

1. 对象存活判断 1.1. 引用计数算法 Reference Counting 给对象添加一个引用计数器,每当有一个地方引用它的时候,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为0的对象就是不可能再被使用的。 主流的JVM没有选用引用计数算法来管理内存,主要的原因是它很难解决对象之间的相互循环引用的问题。 1.2. 可达性分析算法 Reachability Analysis 通过一系列称为“GC-Roots”的对象作为起点,从这些结点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的(图论中的不可达)。 可作为GC Roots的对象: 虚拟机栈(战争中的本地变量表)中引用的对...阅读全文

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

让数据库运行在浏览器里?TiDB + WebAssembly 告诉你答案

作者:Max 一直以来都有个梦想: 希望有一个数据库能够弹性扩展(分布式)到成百上千节点的规模,易于学习和理解,可以运行在私有云、公有云、Multi-Cloud、Kubernetes,也能够跑在嵌入式设备(比如树莓派)上,更酷的是也能够直接运行在浏览器里,而且不需要任何浏览器扩展(Extension),变成「口袋数据库」,就像那部电影《蚁人》。 今天,这一切都变成了现实:TiDB 可以直接运行在浏览器本地。打开浏览器,你可以直接创建数据库,对数据进行增删改查。关掉浏览器,一切都消失了,干净绿色环保—— 首先在笔记本浏览器打开 play.pingcap.com(这里用的是 MacOS 上面的 Chrome,不确定其它浏览器是否正常),可能需要几秒来加载页面,然后就能看到熟悉的 Shell 了。...阅读全文

阿里云虚拟主机使用教程

课程介绍 阿里云虚拟主机市场占用率第一,20年专业品质保证;产品特点:预装网站运行环境,赠送正版数据库,可通过图形化控制面板管理,主要用于搭建网站。 独享系列虚机特点:客户独享整台服务器资源,无资源争抢更稳定,不限流量更快速、独立IP更易推广,适合企业建站客户; 共享系列虚机特点:多客户共享服务器硬件资源,价格优惠,简单易用,适合于开发者、个人站长建站; 产品详情:https://wanwang.aliyun.com/hosting/ 课时列表 • 课时1:购买虚拟主机和初始化密码信息 • 课时2:FTP 上传与解压缩文件 • 课时3:绑定并解析域名 • 课时4:切换语言环境 • 课时5:虚拟主机临时域名的使用 开始学习http:...阅读全文