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

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 波罗学

基于Golang徒手写个转发代理服务

由于公司经常需要异地办公,在调试的时候需要用到内网环境,因此手动写了个代理转发服务器給兄弟们用,项目地址是:socks5proxy。 选型上,语言上就选择了Go,简单清晰,转发协议选择了socks5。 SOCKS5协议介绍 SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递,SOCKS是"SOCKetS"的缩写。 SOCKS5是SOCKS4的升级版,其主要多了鉴定、IPv6、UDP支持。 SOCKS5协议可以分为三个部分: (1) 协议版本及认证方式 (2) 根据认证方式执行对应的认证 (3) 请求信息 (1)协议版本及认证方式 创建与SOCKS5服务器的TCP连接后客户端需要先发送请求来协议版本及认证方式, VER NMETHODS METHODS 1 1 1-25...阅读全文

博文 2019-02-03 12:34:44 机械视角

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** **对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。** 可见云计算中的负载均衡除了通过流量分发让后端的服务器负载均衡,还有两个重...阅读全文

Go语言从入门到精通-04| Socket客户端与服务端

请从github下载配套代码: https://github.com/shuningzhang/learn_golang 大家都知道Web服务是基于HTTP协议的,而HTTP协议又是TCP协议上的应用层协议。因此我们在开发一个Web服务之前,我们先介绍一下如何使用Go语言开发一个基于TCP的客户端与服务端程序(关于TCP协议的原理可以参考本号之前的文章《从socket到TCP协议,透彻理解网络编程》)。 Go语言从入门到精通-04| Socket客户端与服务端 程序比较简单,服务端用于等待客户端的连接,连接建立成功后,如果接到客户端的数据,则原封不动的返回相同的数据。客户端建立与服务端的连接,连接建立成功后向服务端发送字符串数据,并等待接收服务端的返回。 服务端 前面已经介绍,服务端用于等待...阅读全文

博文 2019-03-20 00:34:41 萨泥君

理解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 王磊的博客

分布式强一致kv缓存(1)

本人从事游戏行业,因此这个缓存系统主要针对网络游戏的数据访问模式设计。 首先分析下网络游戏的数据访问模式: 1)关系性弱:对于绝对大多数的游戏类型来说,能通过一个key来访问数据就够了。 2)读多写多:用户登录时通常需要加载大量数据,查询其它玩家信息也是一个频繁的操作请求。在不考虑定时回写的情况下,玩家的每个更新类请求都会产生一次数据库回写请求,对于一个在线10W,养成类游戏,每秒写请求达到10W+是可能的。 3)冷数据多:游戏的注册用户数和活跃用户数差距非常大。大量数据平时几乎不被访问,只有偶尔做活动用户回流时才被访问。 4)响应及时性:即使是一个查看其它用户信息的查询请求,响应时间超过200ms也是非常不友好的。 基于以上考量,我设计了一套名为flyfish的冷热缓存系统,系统设计目标如...阅读全文

博文 2019-10-15 10:02:47 sniperHW

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 习惯研究所所长

golang简单tcp代理

使用golang网络编程实现一个简单的TCP代理(不支持HTTP) package main import ( "flag" "github.com/rs/zerolog" "net" "os" ) var logger = zerolog.New(os.Stdout).With().Timestamp().Logger() func main() { help := flag.Bool("help", false, "print usage") bind := flag.String("bind", "127.0.0.1:6000", "The address to bind to") backend := flag.String("backend", "", "The backend s...阅读全文

博文 2020-06-06 11:32:42 写个代码容易么

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 陌无崖

2018-08-19 说一说现在的Decentralized Storage的传输

golang是特别不适合拿来做应用层可靠协议开发的语言。所有的可靠协议都依赖于连接状态,在讲究并发的场景下,所有的状态都依赖于事件,所有的事件都依赖于内核文件描述符,问题是,在可靠场景下,我们常常需要将一个端口用作一块网卡,一块网卡可以有65536个描述符并发处理事件,一个端口却只有一个描述符,这一个描述符需要模拟出65536个描述符的事件处理效能,这本来就是令人头大的问题。golang本身的协程机制----固然golang和大多数的协程实现不尽一致----导致每一个事件的处理都应短暂,且事件之间应是无状态的,如果对于可靠协议各阶段的业务与事件理解不到位,极其容易实现出资源有余,而协议效能低下的情况。为什么要有上面一段呢?因为目前的Sia,IPFS,Storj,Swarm都是golang实现...阅读全文

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

Golang简介

Go 语言教程 image Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、数组安全、编译迅速 Go 语言用途 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供...阅读全文

博文 2019-07-20 22:32:40 7x24run

golang入门案例之SOCKET

//服务端代码package main import ( "fmt" "net" "log" "os" "encoding/binary" ) func main() { //建立socket,监听端口 netListen, err := net.Listen("tcp", "localhost:8090") CheckError(err) defer netListen.Close() Log("Waiting for clients") for { conn, err := netListen.Accept() if err != nil { continue } Log(conn.RemoteAddr().String(), " tcp connect success") handle...阅读全文

博文 2018-01-17 19:30:00 nazhizq

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 原鸣清

fabric msp架构概览

基本概念 MSP,全称Membership Service Provider,即成员关系服务提供者,是 Hyperledger Fabric 1.0版本开始抽象出来的一个模块化组件,用来管理Fabric中的众多参与者(peer、order等)。 MSP将颁发证书和校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。对fabric网络中的成员进行身份的管理(身份验证)与认证(签名与验签)。 image organization 和 MSP 组织ORG1拥有的MSP叫ORG1.MSP,而组织ORG2业务复杂,所以维护了3个MSP。 organization与MSP之间的专一性关系,使得在organization之后命名MSP是明智的,在大多数policy配置中,您会发现这一个惯例。 例...阅读全文

博文 2020-03-11 13:33:16 框框下山

【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 威客巴拉

mvc

1、MVC这个阶段主要是快速实现产品,没考虑其他的,设计之初划分多个app,app内高类聚,app之间低耦合,DB表设计好了之后,实现view层功能需求,利用Django来快速实现功能,后端有许多预留设计,避免产品逻辑的变更带来整个表结构的变动,架构如下图; MVC架构nginx是负载均衡,通过权重法,把请求发送到多个Django服务(其实中间还有一个uwsgi),如果是静态请求,nginx直接返回给客户端,如果是其他请求,通过uwsgi传给Django,Django拿到请求,处理响应请求。耗时大的需要异步的,我们用celery处理,使用mysql作为数据库,redis作为缓存,加快请求的响应,减轻mysql负担,同时还有实时消息通知的需要使用了Nginx Push Module。问题以及处...阅读全文

博文 2019-12-17 18:32:49 yustyal

官方博文: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语言中文网

2018-10-23 FreeWheel业务系统微服务化过程经验分享

载: https://mp.weixin.qq.com/s/JgNgmYasXaTqrx5OeeD5KQ 2016 年下半年开始,FreeWheel 开始将其业务系统从 Rails 单体应用逐步迁移到微服务,同时技术栈从 Rails 改为 Golang,两年之后,整个迁移接近尾声,FreeWheel 业务系统技术团队对外分享了它们在微服务化过程中的经验。 原有架构的问题 FreeWheel 是一家为客户提供数字视频广告管理技术和服务的公司。其业务端产品需要对接客户,提供视频广告投放优化界面,类似于 Web ERP,该业务系统采用 Rails 技术栈开发,其架构是一个典型的三层架构。 image 这个系统经过近十年的研发和迭代,代码量达到数十万行,业务的特殊性和代码的复杂度让团队的维护和新功能...阅读全文

博文 2018-10-23 14:34:45 四火流年

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 了。...阅读全文