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

golang 几种字符串的连接方式

最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现。 实现方法 1. 直接使用运算符 func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i := 0; i < b.N; i++ { _ = hello + "," + world } } golang 里面的字符串都是不可变的,每次运算都会产生一个新的字符串,所以会产生很多临时的无用的字符串,不仅没有用,还会给 gc 带来额外的负担,所以性能比较差 2. fmt.Sprintf() func BenchmarkAddStringWi...阅读全文

博文 2018-01-24 22:34:36 hatlonely

使用golang制作windows GUI图形界面 — Walk

最近在学golang,想着能否用golang来开发一个Windows图形界面软件,就开始上网找资料,查到golang有一个Walk库可以实现该功能,下面就来认识下golang的Walk。 关于Walk界面库(官方介绍): Walk是一个写给Golang的Window应用程序库套件,它主要用于桌面GUI的开发,但也有更多的东西。 开始前我们要先注意,Walk官方声明,限只支持 golang 1.8.x 以上的版本,1.7.x以下的已经不支持了。 1.我们需要先安装Walk库,运行以下命令 go get github.com/lxn/walk 因github国外服务器原因,安装时间可能需要几十秒,要耐心等待下 2.walk库安装好后,我们在项目下建立一个 test.go 文件,填入代码: pac...阅读全文

博文 2018-07-26 11:30:01 sbman

P2P GO Client角色的协商

1 P2P GO Client协商流程  协商流程 P2P GO/Client的协商流程只需要简单的几步,如下图: P2P连接发起端:指在P2P连接过程中主动发起P2P连接的机子,用A表示; P2P连接接受端:指在P2P连接过程中接受P2P连接的机子,用B表示; 图1 P2P GO/Client协商流程 如上图所示: 1、 首先A在P2P连接初始化准备完成后,发送一个“GO Negotiation Request”给B; 2、 而这时候,B并没有准备好,这时B先保存下A的协商信息,然后发送一个“GO Negotiation Response”给A,该response包含有B的协商信息,但在该response中,B把状态state设置为P2P_SC_FAIL_INFO_CURRENTLY_U...阅读全文

博文 2016-09-17 05:00:02 zjli321

golang 的编译安装以及supervisord部署

go的编译 go的编译相对很简单,只需要一个命令即可完成,进入项目开发路径,输入 go install 即可在bin文件夹下生成可执行文件 appName。此文件可直接运行。 备注:生成的可执行文件只包含go的程序文件,配置文件,views文件等需要拷贝过来,这样才能组成一个完整的运行程序。 go的部署 supervisord安装 yum install setuptools //先安装工具 yum install supervisor 修改配置文件 vi /etc/supervisord.conf 将最后一行的代码改为 files = /etc/supervisord.conf.d/*.conf 新增文件并编写配置 vi /etc/supervisord.conf.d/...阅读全文

微信支付-golang后端处理

一、支付流程 微信开放平台H5支付接入相关链接:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4 相应的支付流程: 二、相关代码 1、统一下单 p,li { white-space: pre-wrap } //首先定义一个UnifyOrderReq用于填入我们要传入的参数。 type UnifyOrderReq struct { Appid string `xml:"appid"` Body string `xml:"body"` Mch_id string `xml:"mch_id"` Nonce_str string `xml:"nonce_str"` Notify_url string `xml:"notify_url...阅读全文

博文 2017-07-01 20:00:01 kaka7518

GO-Agent简单设置

1,下载安装包 官方地址:https://code.google.com/p/goagent/ 这里以版本1.7.9为例,现在有一个zip包。 1) 选择解压到当前文件夹 主要配置一下local文件里面的appid。 以及导入一下证书,如果你打算访问fb,推忒等。 2,配置appid 1) 打开local下面的proxy.ini 把上面的汉字部分替换成你申请的appid,可以配置多个,多个话,流量可以共享,google app engine是有流量限制的。 如果给你们的zip包里面的ini文件已经设置好了我以前的申请的2个appid的话,就不要改了,就用我的吧。 2) 导入根证书,并且信任它。 因为以后要访问的fb等网站的证书都是这个根证书签发的假冒证书,姑且信任吧。 选择信任的颁发机构 选...阅读全文

Go 实现的 TCP 异步框架Tao

Tao 是一个轻量级的 TCP 异步框架,使用 Go 语言实现, **1.1 场景** 你开发的产品有一套特有的业务逻辑,要通过互联网得到服务端的支持才能为你的客户提供服务。 **1.2 问题** 怎样快速稳定地实现产品的功能,而不需要耗费大量的时间处理各种底层的网络通信细节。 **1.3 解决方案** Tao提供了一种用框架支撑业务逻辑的机制。你只需要与客户端定义好消息格式,然后将对应的业务逻辑编写成函数注册到框架中就可以了。 让我们举一个例子来看看如何使用Tao框架实现一个简单的群聊天服务器。服务器端代码可以这么写: 启动一个服务器只需要三步就能完成。首先注册消息和业务逻辑回调,其次填入IP地址和端口,最后Start一下就可以了。这时候客户端就能够发起连接,并开始...阅读全文

九宫格问题(回溯的多种写法,Go语言实现)

九宫格问题(回溯法,Go语言实现) 问题重现: 有1~10十个数,从中选出不重复的9个数填入到九宫格,现要求相邻(上下、左右)的两数之和为质数,问有多少种填法? 此题比较简单,所以直接给代码了。 解法一 package main import ( "fmt" ) var pos [9]int var sub []int = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} var num []int = []int{1, 2, 3, 5, 7, 11, 13, 17, 19} /*从质数中查找,找到返回true*/ func searchFromNum(n int) bool { for i := 0; i < 9; i++ { if n == num[i] { re...阅读全文

Open-Falcon 告警 如何实现自定义多功能告警

Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案。其中有着如下的特点:①强大灵活的数据采集:自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags)②水平扩展能力:支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询③高效率的告警策略管理:高效的portal、支持策略模板、模板继承和覆盖、多种告警方式、支持callback调用④高效率的graph组件:单机支撑200万metric的上报、归档、存储(周期为1分钟)⑤高效的历史数据query组件:采用rrdtool的数据归档策略,秒级返回上百个me...阅读全文

博文 2020-03-11 13:32:58 睿象云

后台用MySQL或者MongoDB数据库控制,用go来接受HTTP请求。这样用户的一举一动尽在掌握之中。同步不同步就容易多了~

这样就不需要磁盘扫描统计了,而是使用数据库统计。这样就可以准确记录当前用户有哪些文件,能干嘛~ 两种方法: 1.客户端上传文件成功以后,http post提交数据库信息。好歹有Apache撑腰,每秒数万不成问题 比如内存2G,减去500M留给服务器,还有1.5G,那么可得到最大连接数:在8000左右: http://www.cnblogs.com/flyoo/archive/2013/05/31/3110499.html 如果换成go语言,就更没有问题了。 2. 服务端自己做接受程序,一旦接受,就往数据库里填入东西 所有操作全靠这个服务端软件,有点悬。何况这个服务端软件还要自己写...阅读全文

博文 2016-09-08 22:00:02 findumars

Golang几种字符串的拼接方式

**字符串拼接在 golang 里面其实有很多种实现。** ***实现方式*** 1. 直接使用运算符 ``` func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i := 0; i < b.N; i++ { _ = hello + "," + world } } ``` golang里面的字符串都是不可变的,每次运算都会产生一个新的字符串,所以会产生很多临时的无用的字符串,不仅没有用,还会给gc带来额外的负担,所以性能比较差...阅读全文

字符串拼接

//方法一: hello := "hello" world := "world" fmt.Println("方法一:"+hello+"--"+world) //方法二:fmt.Sprintf() 根据format参数生成格式化的字符串并返回该字符串。 var str_result string str1 := "hello" str2 := "world" str_result = fmt.Sprintf("%s--%s",str1,str2) fmt.Println("方法二:"+str_result) //方法三:将一系列字符串连接为一个字符串,之间用sep来分隔。 var str_result11 string str11 := "hello" str21:= "world" cont...阅读全文

博文 2018-12-01 22:34:49 越塔打哭你

golang中bufio包的实现原理

最近用golang写了一个处理文件的脚本,由于其中涉及到了文件读写,开始使用golang中的 io 包,后来发现golang 中提供了一个bufio的包,使用这个包可以大幅提高文件读写的效率,于是在网上搜索同样的文件读写为什么bufio 要比io的读写更快速呢?根据网上的资料和阅读源码,以下来详细解释下bufio的高效如何实现的。 bufio 包介绍 bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。 以上为官方包的介绍,在其中我们能了解到的信息如下: bufio 是通过缓冲来提高效率 简单的说就是,把文件读取进缓冲(内存)之后再读取的时候就可以避免文件系统的io 从而提高...阅读全文

博文 2018-01-07 16:33:04 liangwt

string

基础 1 .字符串是一个不可改变的字节序列,一系列8位字节的集合 2 .字符串可以包含任何的数据,包括byte和0. 3 .字符串是一种值类型,且值不能改变,创建某个文本之后无法再次改变这个文本的内容 4 .字符串是字节的定长数组 5 .传统过的字符串是由字符组成的,go的字符串是单个字节链接起来的数组 6 .字节使用utf编码的Unicode文本 7 .字符串底层就是Byte数组 8 .[]byte方法和[]rune方法就是将字符串转化成对应类型的slice 9 .字符串常量一般使用单引号括起来的单个字符 10 .在golang中,字符,字符串中打印单个字符的本质就是一个整数,是改字符对应的utf-8编码的码值 11 .可以给某个变量赋一个数字,然后格式化初始时%c,会输出对应数字的uni...阅读全文

博文 2019-10-06 22:32:44 aside section ._1OhGeD

详解golang中bufio包的实现原理

最近用golang写了一个处理文件的脚本,由于其中涉及到了文件读写,开始使用golang中的 io 包,后来发现golang 中提供了一个bufio的包,使用这个包可以大幅提高文件读写的效率,于是在网上搜索同样的文件读写为什么bufio 要比io的读写更快速呢?根据网上的资料和阅读源码,以下来详细解释下bufio的高效如何实现的。bufio 包介绍 bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。以上为官方包的介绍,在其中我们能了解到的信息如下:bufio 是通过缓冲来提高效率简单的说就是,把文件读取进缓冲(内存)之后再读取的时候就可以避免文件系统的io 从而提高速度。同...阅读全文

博文 2019-10-30 22:33:04 aside section._1OhGeD

如何为Sublime3配置Go语言开发环境

安装GoLang 最简单的办法 - choco choco install golang 或者从官方网站下载也可以, 百度搜一下golang就有. 安装完以后powershell输入golang version, 能看到版本的话, 就是成功的. 建立目录结构C:\Users\hello\go\src\hello 复制代码到hello.go package main import "fmt" func main() { fmt.Printf("hello, world\n") } 打开sublime3, 然后ctrl + shift + p 输入install, 然后输入golang, 找到golang build这个官方插件. 然后设置里面填入 "env": { "GOPATH": "C:/...阅读全文

博文 2019-07-27 14:32:39 陈码工

以太坊源码分析—Ethash共识算法

Ethereum当前和Bitcoin一样,采用基于工作量证明(Proof of Work,PoW)的共识算法来产生新的区块。与Bitcoin不同的是,Ethereum采用的共识算法可以抵御ASIC矿机对挖矿工作的垄断地位,这个算法叫做Ethash。 为什么要反ASIC PoW的的核心是Hash运算,谁的Hash运算更快,谁就更有可能挖掘出新的区块,获得更多的经济利益。在Bitcoin的发展过程中,挖矿设备经历了(CPU=>GPU=>ASIC)的进化过程,其中的动机就是为了更快地进行Hash运算。随着矿机门槛地提高,参与者久越来越少,这与区块链的去中心化构想背道而驰。因此,在共识算法设计时,为了减少ASIC矿机的优势(专用并行计算),Ethereum增加了对于内存的要求,即在进行挖矿的过程中,...阅读全文

博文 2018-11-13 20:34:39 187J3X1

Golang简单又快速地接入rocketmq实现消息队列业务

在web应用业务中,经常会遇到类似异步处理,秒杀,排队等逻辑,这时利用消息队列来完成这样的功能是一个明智的选择; 在业务规模较小的应用中我们可以使用redis中的list数据类型,在大规模业务中我们可以引入rocketmq等,尤其在业务重构时需要将原有的redis消息队列实现改成rocketmq,为了保证既有业务不受影响又不引入新的BUG,是一件非常苦恼的事情; 今天就介绍一个包,可以方便的解决上述问题,他是 Orange框架 中的一个子包,对常用的mq操作进行了封装,即使没有通过该框架开发也能直接使用该子包;通过 go moduls 特性进行按需加载; 让我们更新关注业务本身,各种客户端/sdk接入交给既有封装即可; 准备工作: 搭建好rocketmq服务,启动 mqnamesrv和至少1...阅读全文

博文 2020-06-19 00:33:05 小居_f7bd

唯一ID生成器-发号器实践-企业实例--内存buffer方式

缓存模式 基于内存buffer的发号器架构如图,这也是目前我在维护的发号器之一 优点:1.水平扩展方便2.对高并发支持良好3.数据库依赖较低,只在buffer耗尽时需请求数据库,连接失败情况下仍可实现较长时间发号4.该服务目前支持step发号返回的id格式符合 id=startID+idStep*n5.该服务支持一次获取多号,性能与单个发号相近缺点:1.集群情况下,发号为趋势递增而非严格递增(趋势递增指ID整体上是增加且唯一的,但不是严格两次发号都差1,比如两台服务器A持有1001-2000 B持有2001-3000 两次发号请求分别到了AB两个机器,得到1001 和2001)2.重启服务后未用完的号段作废 实现: 服务以worker方式工作,一个serviceID对应一个worker,以服...阅读全文

博文 2020-04-16 17:33:01 Charles_Wong

《Go语言四十二章经》第十章 string

《Go语言四十二章经》第十章 string 作者:李骁 ## 10.1 有关string Go 语言中的string类型存储的字符串是不可变的, 如果要修改string内容需要将string转换为[]byte或[]rune,并且修改后的string内容是重新分配的。 那么byte和rune的区别是什么(下面写法是type别名): ```go type byte = uint8 type rune = int32 ``` string 类型的零值为长度为零的字符串,即空字符串 ""。 一般的比较运算符(==、!=、<、<=、>=、>)通过在内存中按字节比较来实现字符串的对比。你可以通过函数 len() 来获取字符串所占的字节长度,例如:len(str)。 字符串的内容(纯字节)可以通过标准索引...阅读全文

博文 2018-09-26 20:07:40 roteman

Windows ECS上如何以正确的姿势配置FTP Server使用NAS

摘要: 如何在Windows ECS上正确配置FTP,使FTP用户可以访问ECS上挂载的NAS文件系统。 以下配置以Windows2008 + FileZillaServer为例,介绍如何在Windows ECS上配置FTP服务器,并将NAS文件系统输出给FTP的用户。 (以下内容假设用户已经安装FileZillaServer) 第一步:配置FTP Service以指定用户运行。 由于用户挂载NAS的一般是当前登录用户,比如Administrator,但默认FileZillaServer是以”SYSTEM”用户运行,Windows默认对于挂载的NAS映射的盘符(比如Z:)是对不同用户隔离的,因此为了让FTP服务程序可以访问NAS,需要配置FTP服务以相同的用户...阅读全文

自动化部署工具Syncd v1.1.0发布,提供二进制安装包

Syncd是一款开源的代码部署工具,它具有简单、高效、易用等特点,可以提高团队的工作效率。 项目地址(Github) 项目地址(Gitee) 下载地址 v1.1.0 使用文档 特性: Go语言开发,编译简单、运行高效 Web界面访问,交互友好 灵活的角色权限配置 支持Git仓库 分支、tag上线 部署hook支持 完善的上线工作流 邮件通知机制 更新内容 安装脚本通过go env获取GOPATH #8 utf8 to utf8mb4 #13 支持go modules #4 压缩登录背景图 #5 添加服务器支持填入域名 #3 解决没有添加集群的时候添加项目出错 #7 提供二进制安装...阅读全文

博文 2019-01-16 09:34:42 dreamans

Bytom猜谜合约使用指南

准备工作: 1、安装全节点钱包V1.0.5以上并同步完成; 2、已经发行一种资产,发行资产的方法具体见文章《如何在Bytom上发布资产?》 3、准备好一些BTM作为手续费; 设置谜语(锁定资产): 1、打开钱包,点击Equity合约按钮; 2、进入Equity合约页面,点击加载模板,可以看见猜谜合约; 3、点击猜谜合约,进入猜谜合约模板; 4、在锁定资产页面中,选择我们要奖励给猜对答案的资产奖励(当前不支持直接锁定BTM,所以我们需要新建一种资产进行锁定); 设置锁定GOLD资产,选择想要的数量(注意:1=1诺=0.00000001单位,所以你如果想给别人发1单位的资产,需要填入100000000),填入密码以及Gas费用(合约建议固定给0.4btm); 5、设置猜谜的谜底(正确答案),比如...阅读全文

博文 2018-09-12 10:34:39 比原链Bytom

golang标准库之flag

flag包实现了简单的命令行参数解析,支持bool、int、int64、uint、uint64、float64、string和time.Duration八种类型的命令行解析。 使用方法 注册flag流程如下: import "flag" var ip = flag.Int("flagname", 1234, "help message for flagname") // 返回指针类型,访问时需要加* fmt.Println("ip has value ", *ip) var flagvar int func init() { flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname") // 放在init函数中,确保...阅读全文

博文 2020-06-02 17:32:53 风铃草613

leetcode_78

Golang: 思路:递归加回溯,emmm,就是在选择第n个时,可以选择nums[n],也可以选择空(即不填入),惭愧,这题是看了题解才理解的,太菜了。 代码如下: func subsets(nums []int) [][]int { var res [][]int if len(nums)==0 { return res } var temp []int getSubsets(&res,nums,&temp,0) return res } func getSubsets(res *[][]int,nums []int,temp *[]int,n int){ if n==len(nums) { cop:=make([]int,len(*temp)) copy(cop,*temp) *res=...阅读全文

博文 2020-02-04 19:33:05 淳属虚构