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

golang time 格式详解

神奇时刻:2006-01-02 15:04:05 1 官方文档 time package(需科学上网查看):https://golang.org/pkg/time/ 2 自定义时间格式 在看代码之前,先问一个关键问题:你懂 2006-01-02 15:04:05 么?不懂还是看代码吧! package main import ( "fmt" "time" ) func main() { // 使用系统默认格式打印当前时间 t1 := time.Now(); fmt.Println("t1:", t1) // 自定义格式,相当于Java中的时间格式:yyyy-MM-dd HH:mm:ss t2 := t1.Format("2006-01-02 15:04:05") fmt.Println("t...阅读全文

博文 2018-10-10 21:34:45 银冰雪千载

Golang 图片上绘制文字

之前介绍过使用 FreeType-go 来绘制字(http://www.cnblogs.com/ghj1976/p/3445568.html), 现在相关的包被做了整合,主要是整合到了 github.com/golang/freetype 和 golang.org/x/image/font 这里了,所以就有了这篇博客。 例子代码在: https://github.com/golang/freetype/blob/master/example/freetype/main.go package main import ( "bufio" "flag" "fmt" "image" "image/color" "image/draw" "image/png" "io/ioutil" "log" "o...阅读全文

博文 2016-03-11 10:00:01 ghj1976

Go 的 rune byte 和 string

- `rune` 、 `byte` 和 `string` 都是 `Go` 的内置类型 ----- - `byte` - byte是`uint8`的别名,在所有方面都等同于`uint8` - 按惯例,它用于区分**字节值**和**8位无符号整数值**。 - `rune` - `rune`是`int32`的别名,在所有方面都等同于`int32` - 按惯例,它用于区分**字符值**和**整数值**。 - `string` - string是所有**8位字节字符串**的集合,通常但不一定代表UTF-8编码的文本 - 字符串可能为空,但是不能为 `nil` - 字符串类型的值是不可变的 - 由上面得解释我们大概可以明白 - `rune` 可以表示得比 `byte` 多 - `string` 类型的底...阅读全文

中文手机域名,开启“移动互联网+”新时代

要说这两年让人印象深刻的中文域名,非“.手机”莫属。这个简单粗暴又直白的域名,自开放注册依赖就被上百个手机品牌哄抢。 中文手机域名的优势 1、 中文手机域名自开放注册依赖,注册量已达到32313个,居中文域名注册量第5位,前4名分别是“.网址”、“.信息”、“.公司”、“.世界”。手机巨头小米手机、电商巨头唯品会、数码巨头尼康等均已注册中文手机域名。 ![20161212160555_28665.png](http://studygolang.qiniudn.com/170204/36165d3ccb247c9d2d4a5f686d209ea4.png) 2、 调查显示,有75.4%的智能手机用户,每两年至少换一次机,34.4%的用户至少一年一换,仅有24.6%的用户能坚...阅读全文

golang中使用kafka

golang中比较好用的kafka client有 sarama confluent-kafka-go go_kafka_client optiopay-kafka siesta 其中 sarama的使用者应该是最多的, 然后还有一个sarama的cluster版本sarama-cluster 本文简单描述下sarama的一些简单使用 生产者接口 func producer_test() { fmt.Printf("producer_test\n") config := sarama.NewConfig() config.Producer.RequiredAcks = sarama.WaitForAll config.Producer.Partitioner = sarama.NewRand...阅读全文

博文 2018-09-29 18:34:37 yandaren

rete算法学习

在上篇博客中,介绍了策略型业务逻辑处理中几种选择,其中有一种选择就是利用规则引擎来进行逻辑处理。其实藏在规则引擎的底层中还是有很多算法的,其中有一种算法是rete算法,最近正好也关注算法,就简单的学习了一下,因为对这个算法理解的非常清楚,所以如果有有对这个算法熟悉的朋友,可以给予指正。 RETE算法是一个用于产生式系统的高效模式匹配算法。在一个产生式系统中,被处理的数据叫做working memory,用于判定的规则分为两个部分LHS(left-hand-side)和RHS(right hand side),分别表示前提和结论。主要流程可以分为以下步骤:Match:找出符合LHS部分的working memory集合Confilict resolution:选出一个条件被满足的规则Act:执...阅读全文

博文 2017-11-29 01:46:20 lfsf802

go语言中的defer、panic、recover处理异常

go语言中的defer就像c++中的析构函数,但是go语言中defer的对象是函数(或者对象的方法),defer能保证在函数结束最后执行该方法(函数),但是有例外:如果在定义的方法中defer定义的方法如果在panic后面,defer定义的方法就无法执行到。 panic 是用来表示非常严重的不可恢复的错误的。在Go语言中这是一个内置函数,接收一个interface{}类型的值作为参数。panic 的作用就像我们平常接触的异常。不过Go可没有try…catch,所以,panic一般会导致程序挂掉(除非recover)。所以,Go语言中的异 常,那真的是异常了。你可以试试,调用panic看看,程序立马挂掉,然后Go运行时会打印出调用栈。 但是,关键的一点是,即使函数执行的时候 panic了,函数...阅读全文

博文 2016-02-13 11:00:01 kc87654321

Golang命名规范

请使用Goland编辑器使用,设置请看goland设置篇 package名字 保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。 import 规范 // 单包引入 import ( "fmt" ) // 多包引入,没包独占一行 import ( "encoding/json" "strings" "github.com/go-sql-driver/mysql" ) 常量声明 // 常量只能由英文字母组成 // 全部大写 const DIR = "/static/pic" 变量声明 // 变量只能由英文字母组成 // 变量全部使用小驼峰命名,根据是有需要导出决定首字母是否大写 // 多个变量申明使用var括号 var ( userAge int...阅读全文

golang统计出其中英文字母、空格、数字和其它字符的个数

方法一 通过ASCII码表判断并统计 package main import "fmt" func charactortype() { var s2 string = "112aaaaFGG123 *&^%" var e,s,d,o int for i := o; i < len(s2); i++ { switch { case 64 < s2[i] && s2[i] < 91: e += 1 case 96 < s2[i] && s2[i] < 123: e += 1 case 47 < s2[i] && s2[i] < 58: d += 1 case s2[i] == 32: s += 1 default: o += 1 } } fmt.Printf("字符串英文字符个数是: %d\n"...阅读全文

gslang——原生golang/RPC描述语言简介

gslang背景知识 gslang是采用go语言编写的RPC描述语言,最初它被用来描述gscluster网络服之间的接口调用契约;而gscluster项目本身是我在tap4fun时开发的一个游戏服务端框架,所以能够看到gscluster里面有很多与游戏相关的概念。但是框架本身是为mico-service而生的,所以你可以将它应用到任何你觉得合适的地方,不必局限于游戏服务器。 gslang是一个完整的RPC描述语言,它与thrift定位相同。没有直接采用thrift的原因是: 在开发gslang的时候,thrift对golang的支持并不完善; 根据项目需要,需要hack代码生成的过程例如:profile,debug 代码; gslang前端解析器在github上的位置:这里 语言特性 gsl...阅读全文

博文 2015-05-20 04:00:05 yayanyang

把一个字符串中的字符从小写转为大写

将字符串里面的英文小写转成大写,是一个很简单的操作。每个字符的编码可以认为是整数,Golang里面的byte和rune是uint8和int32。其它语言大同小异。在编码表当中,位置是是从A到Z,接着是a到z,A对应的整数是65,a对应的整数是97,中间差了26个英文字母和6个其它字符的长度共32。所以转换的方法就是,将小写字母的值,剪掉32即可。 还是编码的问题。最早的出现的编码是ASCII,从128个增加到256个字符。再到后面的Unicode、GBK等,这些新出的编码和最早的ASCII都是兼容的,也就是说,不同的编码里面,前256位都是一样的。所以,在这里的英文字符转大写问题,不存在编码问题。 这个题目在Golang的strings包里有专门的实现ToUpper,此函数内部封装了unic...阅读全文

golang在图片上绘制中文不乱码的方法

直接先上代码: package main import ( "fmt" "github.com/golang/freetype" "image" //"image/color" "image/png" "io/ioutil" "log" "os" ) const ( dx = 500 // 图片的大小 宽度 dy = 500 // 图片的大小 高度 // fontFile = "FZFSK.TTF" fontFile = "bbb.ttf" fontSize = 20 // 字体尺寸 fontDPI = 72 // 屏幕每英寸的分辨率 ) func main() { // 需要保存的文件 imgcounter := 123 imgfile, _ := os.Create(fmt.Sprint...阅读全文

博文 2017-12-26 03:33:06 迷路的阿修罗

golang中的类型和接口

Go语言的类型定义非常接近于C语言中的结构(struct),甚至直接沿用了struct关键字。相比而言,Go语言并没有直接沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承和重载,而只是支持了最基本的类型组合功能。 巧妙的是,虽然看起来支持的功能过于简洁,细用起来你却会发现,C++和Java使用那些复杂的类型系统实现的功能在Go语言中并不会出现无法表现的情况,这反而让人反思其他语言中引入这些复杂概念的必要性。我们在第3章中将详细描述Go语言的类型系统。 Go语言也不是简单的对面向对象开发语言做减法,它还引入了一个无比强大的“非侵入式”接口的概念,让开发者从以往对C++和Java开发中的接口管理问题中解脱出来。在C++中,我们通常会这样来确定接口和类型的关系: // 抽象接口 ...阅读全文

博文 2016-06-14 03:00:00 hellochenlu

《Go语言程序设计》第3章练习

3.1 输入一个三位整数,求出该数每个位上的数字之和。如123,每个位上的数字之和就是1+2+3=6。 3.2 输入三个float64类型浮点数,分别求出它们的和、平均值、平方和以及平方和的平方,并输出所求的各个值。 3.3 设f表示华氏温度、c表示摄氏温度、k表示绝对温度,将华氏温度转换为摄氏温度和绝对温度的公式分别为: c=5/9*(f-32) k=273.16+c 编写程序,要求通过键盘输入f的值,计算c和k的值并输出。 3.4 编写程序,把极坐标(r,θ)转换为直角坐标(x.y),其中的θ单位为度。转换公式是: x = r * cosθ y = r * sinθ 3.5 通过键盘输入英文字符串,并统计字符串中的英文字母个数,同时输出字符串字节长度...阅读全文

基础问题:关于【named type】 和 【unnamed type】

【https://golang.org/ref/spec#Types 】--->这是关于type的描述。里面有两句: Types may be named or unnamed. Named types are specified by a (possibly qualified) type name; unnamed types are specified using a type literal, which composes a new type from existing types. 有点不大理解,因为下面没有举出例子。所以还是不懂什么叫named type,什么叫unnamed type。 本来想跳过,以后再慢慢接触,可是另一个地方又出现这个named和 unnamed...阅读全文

RSA到底是谁加密?

RSA到底是谁加密? RRSA加密是最常用的非对称加密方式,原理是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。 但你一定会碰到过,两个开发者争执:到底是由谁加密,谁解密? 看完这篇文章,你就会明白这一切。 规范怎么说 我们先来看看权威库open_ssl的文档描述,它定义了四个方法 RSA_private_decrypt RSA_private_encrypt RSA_public_decrypt RSA_public_encrypt 看起来似乎私钥和公钥都可以用来进行加密解密? 但是仔细查看 RSA_public_decrypt 和RSA_private_encrypt的描述都是:low level signature operations...阅读全文

博文 2020-05-06 21:32:46 boywus

分布式trace原理-dapper总结

项目上微服务,由于日志会散落在各个microservice,多主机甚至多数据中心,发现debug是非常地痛苦,同时新鲜血液的培训和沟通成本也会随之增加。因此,在思考引入分布式的trace,一方面能够更好提供debug手段,另一方面由于可以可视化调用链,因此相信新人更加能够快速入手。 我在网上google了一些分布式的trace解决方案,包括twitter的Zipkin, Uber的Jaeger以及sourcegraph的Appdash. 发现所有的工具背后原理都是参考dapper--google关于分布式trace的一篇技术报告。因此有必要对原文进行研究。 1.Dapper的原理 1.1 Trace的数据结构 Dapper的目标是提供可扩展,低开销,透明的分布式trace系统,其原理实际上非...阅读全文

博文 2019-07-17 00:32:45 大雄good

go beego模板嵌套list

{{range $k,$v :=.Names}} {{end}} 节点 名称 执行体 描述 状态 操作 {{.Name}} {{range $k1,$v1 :=$.List}}{{if eq $v.Name $v1.Node}} {{end}}{{end}} {{.Name}} {{.Exe}} {{.Desc}} {{.State}} 运行|停止 {{range .Categoryjieduan}} {{.Id}} {{.Title}} {{.Views}} {{range $.Categoryzhuanye}} {{.Title}} {{range $.Categorychengguo}} {{.Title}} {{end}} {{end}} {{end}...阅读全文

博文 2016-10-28 14:00:02 MR1269427885

go in action

需求 公司要实现大中台战略,以往的后台都是基于传统的技术架构实现的系统。 系统在性能及扩展性上都存在有客观的局限性。 如何将传统系统的原子性服务或组合服务提供给中台是需要解决的一个问题。 概要设计 原子性的服务,通过直连数据模型,并将其转化为RESTFULL的方式来实现。 组合服务通过接口适配转换及转化为统一RESTFULL的方式来实现。 详细设计 原子性服务设计 服务列表 服务编号 服务名称 备注 模型元数据 schema/base/${MODEL_NAME} 如果${MODE_NAME}为空,则是全部信息 模型属性元数据 schema/prop/${PROP_NAME} 如果${PROP_NAME}为空,则是全部信息 模型主键元数据 schema/primary_key/${PRIMAR...阅读全文

博文 2019-07-17 14:33:50 do_young

图像相似性比较实践

2008年TinEye上线了图片搜索,开始是注册制,后来逐步放开。2011年, Google也上线了相似图片搜索,通过用户上传的图片,可以搜索相似的图片。参考文档中提供了一些介绍图像搜索的一些文章, 尤其是阮一峰2011年和2013年两篇普及性的文章,可以帮助你了解图像相似搜索的原理。 图像相似性搜索应用广泛、除了使用搜索引擎搜索类似图片外,像淘宝可以让顾客直接拍照搜索类似的商品信息、应用在商品购物上。也可以应用物体识别比如拍图识花等领域。目前我在调研图片鉴权的方案,通过一张图片和图片库中的图片进行比对,来确定这张图片是否侵权,或者退一步讲,图片库中是否包含和这张图片类似。 这个需求和目前深度学习应用中的图像识别还不一样, 图像识别是需要将图像中的物体识别出来, 猫啊狗啊什么的,而我所要做的...阅读全文

博文 2018-12-23 21:22:16 smallnest

Go 语言中命名规范——如何简短却更具描述性

> 在计算机科学与技术中,有两件事情最难,第一是缓存无效,第二就是给一些东西命名 —— Phil Karlton 上面的话可不是一个笑话。写代码很容易,但是阅读起来却很痛苦。你是否有想知道一个变量具体指什么或者某个包的具体含义是什么这种类似的经历?这就是为什么我们需要一些规则和约定。 不过,约定虽然能够让我们的生活变得更轻松,但是也容易被高估和滥用。设置一些合理的命名约定和规则非常重要,不过盲目的遵循它也可能带来很多弊端。 在这篇文章里面,我将介绍在[Go](https://golang.org/)中,一些重要的变量命名约定(官方的以及非官方的规则)以及在什么场景下会存在滥用的情况,特别是那些短变量命名的场景。篇幅有限,包和文件的命名以及项目结构命名有关的内容不在本文讨论范围内,他们应该可以...阅读全文

博文 2020-05-31 12:21:49 JYSDeveloper

由一个问题引发对文件描述符的研究

故事的起因 一次一个同事给我发了一段简单的代码,问我这段代码有什么问题? package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.txt") if err != nil { fmt.Println(err) } fmt.Println(f.Name(), "opened successfully") } 看到这段代码后不加思索的回答,文件没有close,他说错,可能当时我们没在一个频道上,“err处理没有return”。 又仔细的看了下代码,发现err的处理代码块后使用了f.Name(),这个是存在问题的,因为当open发生错误时,返回的文件句柄则为nil,下文直接使用f.Name()。这种错误对于初...阅读全文

Go字符串常用方法

更多方法,请见golang中文https://studygolang.com/pkgdoc // 1. =============统计字符串长度,按字节len(str) // ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。 // UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节 // go中都以utf8进行编码 str1 := "hello world 哈哈" fmt.Println("str len=", len(str1)) // 18 // 2. =============字符串遍历,同时处理有中文的问题 r:=[]rune(str) // 常规遍历时,一个中文占三个字节,直接遍历...阅读全文

博文 2019-12-26 08:32:42 领带衬有黄金

Golang GC导致的文件描述符不可用

现象1. 压力测试时,使用syscall.Accept得到 bad file descriptor,server直接无法响应。原因1. syscall.Accept使用的fd来源是在自己代码初试化的时候通过TCPListener.FIle().Fd()直接拿到,且在自己的代码中通过int 类型保存了这个返回的系统fd,后续直接使用int 类型存储的fd值进行epoll相关操作2.事实上Golang 的实现实现中TCPListener.FIle() 返回的*os.FIle不是TCPListener原有的*os.File对象,而是dup(拷贝)一份,同时这个dup动作中会使用系统调用对于原来的系统fd也执行一次dup,进而生产一份新的额系统fd3.TCPListener.FIle().Fd() ...阅读全文

博文 2019-07-07 01:02:39 luofanyuguai

golang之反射

反射这个概念绝大多数语言都有,比如Java,PHP之类,golang自然也不例外,反射其实程序能够自描述和自控制的一类机制。 比如,通过PHP的反射,你可以知道一个类有什么成员,有什么方法。而golang,也能够通过官方自带的reflect包来了解各种变量类型及其信息。 下面我们通过一个例子查看反射的基本用法。 话不多说,直接贴代码: package main import ( "fmt" "reflect" ) type Order struct { ordId int customerId int callback func() } func reflectInfo(q interface{}) { t := reflect.TypeOf(q) v := reflect.ValueOf(...阅读全文

博文 2019-10-12 17:02:49 aside section ._1OhGeD

Go语言性能优化-两数之和算法性能研究

好多人都在刷leetcode,今天我也注册了一个玩玩,发现里面好多都是算法题,好吧,毕业十来年,学的那点可怜的数学知识,全都还给学校了。好了闲话少说,言归正传,让我们看看今天在里面我尝试的第一道题,有点意思, 不只是单纯的算法,还有数据和是否适合的问题。 承题 点开题库,看了第一题,我们看看这道题: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 用了这么多文字描述,其实总结起来就是:数组里那两个数想加等于目标值,找出来这两个数的索引。 题是不难...阅读全文

博文 2018-10-17 19:44:34 飞雪无情

Go基础学习记录 - 编写Web应用程 - Web开发输入验证(二)

前面的文章分享的部分功能都能正常使用,本次分享分析下 -- 输入验证 为了保持项目的可学习性,我这里将之前分享的代码积累了下,放在github上,想要尽快入手学习的,可以直接clone我的代码,写代码不上手,都等于白搭,光看的话,对于我来说,我是不行的,没办法学会。 项目地址 https://github.com/durban89/wiki_blog tag: 1.0.2 有些同学可能看不懂,怎么就只给了这些,完全不懂呀。我把使用的命令打出来,照着操作,就应该可以解决了 git clone https://github.com/durban89/wiki_blog /local/path cd /local/path git fetch origin git checkout 1.0.2 这...阅读全文

博文 2018-08-19 23:34:45 DurbanZhang

golang 基础(19)字符串

square-gopher.png 字符和字符串处理 func main(){ s := "Yes我爱Go!" fmt.Printf("%s\n",[]byte(s)) } 这样打印出是就是 "Yes我爱Go!"、打印一下(fmt.Println(len(s)))输出 s 长度为 12 。那么这个 12 是怎么来的呢。 fmt.Printf("%X\n",[]byte(s)) 可以打印出里面具体字节的数字,会使用 %X 来打印字节 596573E68891E788B1476F21 这样并不便于观察,我们可以通过 for 循环来讲字符一个一个打印出来 for _, b := range []byte(s){ fmt.Printf("%X ",b) } fmt.Println() 59 65 7...阅读全文