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

[笔记]Go语言的字符串拼装方式性能对比

Go语言中字符串的拼装方法很多,那么问题来了,到底哪家性能好? 下面代码,分别比较了 fmt.Sprintf,string +,strings.Join,bytes.Buffer,方法是循环若干次比较总时间。 在VMWare下的Ubuntu 14.04下运行的结果表明: fmt.Sprintf 和 strings.Join 速度相当 string + 比上述二者快一倍 bytes.Buffer又比上者快约400-500倍 如果循环内每次都临时声明一个bytes.Buffer来使用,会比持续存在慢50%,但是仍然很快 测试代码如下: package main import ( "bytes" "fmt" "strings" "time" ) func benchmarkStringFuncti...阅读全文

博文 2015-03-08 03:00:01 journeyonmyway

go时间比较

go中time比较时需要注意写法 package main import ( "fmt" "time" ) func main() { format := "2006-01-02 15:04:05" now := time.Now() //now, _ := time.Parse(format, time.Now().Format(format)) a, _ := time.Parse(format, "2015-03-10 11:00:00") b, _ := time.Parse(format, "2015-03-10 16:00:00") fmt.Println(now.Format(format), a.Format(format), b.Format(format)) fmt.Pr...阅读全文

博文 2015-03-10 16:00:01 beyondforever68

golang append时slice len 和 cap

声明: 源slice= src 添加slice = app 结果slice=tar append时 len tar === len src + len app 1)如果len(src) + len(app) <= cap(src) cap tar = cap(src) 2)否则 a) len(src) + len(app) > 2* cap(src) cap tar = len(src) + len(app) b) cap(src) < len(src) + len(app) <= 2* cap(src) cap tar = 2* cap(src) data := make([]int, 10, 20) data[0] = 1 data[1] = 2 dataappend := make([...阅读全文

博文 2014-10-04 19:27:08 咖啡伴侣

Go实现线程池

本文通过代码讲解如何实现一个线程池。代码及注释如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 package main import "fmt" import "time" //这个是工作线程,处理具体的业务逻辑,将jobs中的任务取出,处理后将处理结果放置在results中。 func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("worker", id, "processing job", j) ...阅读全文

博文 2016-09-17 01:00:06 kc87654321

golang urlencode

u := url.Values{} u.Set("a", "1") u.Set("b", "2") u.Set("data", `{"sessionId":"0bts0W1DWKm70B4UZq3V1h3r2DpsbhDsc2WD","eventId":"8F2qNf0bts0W1DWKm70B4UZq3V1h3r2Dpsbh","androidId":"b22f3d41736f748c","userAgent":"Mozilla/5.0 (Linux; Android 5.1; MI PAD 2 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Safari/53...阅读全文

博文 2017-09-27 23:30:01 kccdzz

golang map to struct

http://stackoverflow.com/questions/26744873/converting-map-to-struct func SetField(obj interface{}, name string, value interface{}) error { structValue := reflect.ValueOf(obj).Elem() structFieldValue := structValue.FieldByName(name) if !structFieldValue.IsValid() { return fmt.Errorf("No such field: %s in obj", name) } if !structFieldValue.CanSet() ...阅读全文

博文 2016-06-16 13:00:15 diegodu

嵌入式学习的13大法则,你造吗?

![QQ截图20160909173057.png](http://studygolang.qiniudn.com/160909/bf156e01821db5bab860f038637f0bb5.png)   学习嵌入式的过程,是一个不断积累,不断实践的过程。毕竟,一名有成就的程序员不是一蹴而就的,下面是来自一个嵌入式开发高级工程师为我们总结的关于嵌入式开发学习的13大法则,大家不妨参考一下:   一、资源有限性法则   嵌入式计算不仅需要网络快速、一致的计算,而且也要求系统能够井然有序地将其执行代码和数据,存储在一个“共同”的“狭小”的空间内。   二、冗余度法则   在嵌入式系统具有足够的冗余度之后,系统的“初始敏感性”对于其“最终计算结果”的影响就变得微乎其...阅读全文

七牛云音视频新功能:音频支持 AAC_HE

![1.png](http://studygolang.qiniudn.com/160229/ae427c76a903c127fb114c705f44f355.png) 与大家所熟知的 MP3 一样, AAC 也是一种常见的音频格式。现如今常见的 AAC 规格有三种: LC-AAC (最基本的), HE-AAC ( AACPlus v1 ), HE-AAC v2 。 HE :“ High Efficiency ”(高效性)。 HE-AAC (又称 AACPlus v1 , SBR ),用容器的方法实现了 AAC ( LC )和 SBR(频段复制)技术。 SBR 把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,在减少文件大小的情况下还保存了音质。 HEv2...阅读全文

如何深入的理解gorountine的执行效率问题?

执行环境:window7/64 , go1.4 在学习go的gorountine时执行的例子: ``` package main import "fmt" func sum(values [] int, resultChan chan int) { sum := 0 for _, value := range values { sum += value } resultChan <- sum // 将计算结果发送到channel中 } func main() { values := [] int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} resultChan := make(chan int, 2) ...阅读全文

为什么程序员适合做自由职业者

为什么程序员适合做自由职业者 官网“:www.yunzujia.com/?res=golang1 你也想开一个咖啡馆? 谈到梦想的时候,很多人会说:“想开个自己的咖啡馆/餐厅/奶茶店/旅馆”。 有人分析过,梦想之所以惊人相似,其实是因为大家有共同的诉求: 1、有份收入; 2、入门简单; 3、自己做主; 4、美美哒; 5、面向流动人群。 人们都向往自由的生活,钱够花就行,希望享受闲暇,认识更多有趣的朋友,做一个自由职业者。 生命不息,加班不止 有钱但忙到死,有趣但穷到哭,有空但无聊得要命,都不算一个好状态。如果没钱没时间又无聊,真的是生不如死。然而,程序员就是过着这样的生活... 大多数程序员从事业务或信息系统这样低技术含量...阅读全文

调查显示:明年容器企业级用户将出现井喷式增长

如果调查可信的话,很多企业已经将容器技术投入使用,但这只是冰山一角,而未来几年将会迎来井喷式增长。另外值得注意的是,对于系统管理员来讲,安全仍然是最大的担忧。 容器安全公司Twistlock的一项调查显示,有将近86%的企业IT决策者表明他们已经使用容器技术,或者将在未来一年内使用容器技术。值得一提的是,这86%的调查者中,有35%表示容器技术已经在企业广泛使用。 来自ClusterHQ的调查也证实了这一点:在285名调查对象中有94%表示在过去的一年里他们要么调研过容器技术,要么已经在企业中实际使用过一些容器技术。和Twistlock调查结果稍微不同的是,有38%表示他们已经把容器投入到生产环境。但65%的人表示,到明年他们公司才会应用容器技术到生产环境。ClusterHQ 为...阅读全文

关于json转struct struct中有map

有这么一个json,我想直接转成struct struct ``` type whatBean struct { action string control string } ............... tmp := "{\"这个key好多\":{\"action\":\"123\",\"control\":\"456\"},\"这个key真的好多所以用map\":{\"action\":\"/roamApi/getAuthStatus.action\",\"control\":\"https://sosona.com:8443\"}}" var grid map[string]whatBean json.Unmarshal([]byte(tmp), &g...阅读全文

用js异步提交表单后,怎么接受服务端返回的cookie

我用jqury.form.js 异步提交了一个登陆账号表单,服务端验证通过了,我写了一个cookie,返回的数据全被js拦截了,cookie也没有写到浏览器,我要怎么才能处理这个cookie呢? 下面是我的golang代码片段 ``` func loginHandler(w http.ResponseWriter, r *http.Request){ //do something // 获取表单信息 加 判断 //返回cookie SetCookie(loginInfo.username,w) http.Redirect(w, r, "/", 302) return } func SetCookie(name string, w http.Respons...阅读全文

[译]REST和微服务——用异步交互分解单体系统

前段时间我大发雷霆,因为有人曲解了REST在微服务中的作用,而且没能正确使用它。有人认为无法基于HTTP进行异步交互,所以基于HTTP的单体系统无法被分解成微服务。大多数人认为HTTP就是REST,这是件让人感到悲哀的事情。在我们的行业里,这些人都是很有经验的,本该知道这两者其实是不一样的。如果你也分不清它们之间的区别,那么请先看看Rest Cookbook或者Roy博士的文章。 好吧,似乎有点跑题了,让我们回到之前说的问题上:我之所以大发雷霆,是希望把大家引导到正确的方向上,同时给大家提供一些建议。 REST和HTTP 首先,并不是说构建微服务一定要基于HTTP。关于这个,可以看看InfoQ上早前发表的一些相关文章,或者回顾过去7年我们在WildFly/EAP及其它项目上所做的事情。 HT...阅读全文

博文 2016-08-05 11:19:13 xuemingdeng

移植java web 项目到go语言要解决的一系列问题

最近想把一个java web 服务项目用go语言重写一遍,虽然go语言非常简洁易用,设计思想也非常好,但在移植过程中还是遇到了一系列的问题,先把问题列在这里,以后有时间逐个解决。 web服务器:go语言自带,很好用 mysql数据库驱动:github.com/go-mysql-driver实现了官方驱动接口,推荐使用 数据库连接池:没有合适的,自己实现一个吧 session操作库:github.com/sessions 还算好用,在不自己重写的情况下,可以使用 json操作库:go语言自带,很好用 返回固定格式的json消息:未完成 重新包装sql操作及处理结果集:未完成,下一步继续研究...阅读全文

博文 2014-12-16 10:00:13 jinciyulang

chan 的疑惑

``` package main import "fmt" func sum(values [] int, resultChan chan int) { sum := 0 for _, value := range values { sum += value } resultChan <- sum // 将计算结果发送到channel中 } func main() { values := [] int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} resultChan := make(chan int, 2) go sum(values[:len(values)/2], resultChan) go sum(values[len(...阅读全文

go语言实现斐波数列

斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) 递归实现 package main import "fmt" func fibonacci(num int) int{ if num<2{ return 1 } return fibonacci(num-1) + fibonacci(num-2) } func main(){ for i := 0; i<10; i++{ nums := fibonacci(i) fmt.Println(nums) } } 闭包实现 package main import "fmt" func f...阅读全文

博文 2016-08-30 01:00:08 chenxun2009

在 Golang 定时任务中判断函数是否执行完成

使用 golang 的定时任务(采用 robfig/cron 包),每 5s 调用一个函数进行处理,但是这个函数的处理可能会耗时,在没有执行完之前如果再次调用,就会导致计算结果不对。如定时任务:// 5s 定时任务 func run5Second() { spec := "*/5, *, *, *, *, *" c := cron.New() //npc刷新 c.AddFunc(spec, modelFish.NpcRefresh) c.Start() }NpcRefresh 方法定义:// NpcRefresh 返回需要刷新的NPC func NpcRefresh() { online := getOnlineRoomIds() //online := []string{"5"} fmt....阅读全文

博文 2017-06-19 14:46:54 nfwater

bytes.Join的用法

```go package main import ( "bytes" "fmt" ) func main() { hello := "hello" helloBytes := []byte( hello ) fmt.Println( helloBytes ) world := "world" worldBytes := []byte( world ) fmt.Println( worldBytes ) helloWord := [][]byte{ helloBytes,worldBytes } fmt.Println( helloWord ) helloWords := bytes.Join(helloWord,[]byte{}) fmt.Println( helloWords ) } `...阅读全文

博文 2018-09-15 09:07:13 JimPang

computer go

这学期做了一个计算机围棋的项目,也因此自学了围棋,就程序而言虽然最后比赛结果不是很好,但仍然有了一个初步的轮廓。 先上一个程序自己跟自己下的截图 接下来我来逐步介绍一些细节,里面会涉及到很多围棋方面的知识,但大部分是简单的,因为复杂的围棋概念,例如薄厚,眼形,模样,目前还是很难用计算机程序来描述的。另外这个程序还存在一些其他更重要的问题尚未解决,下面我会一一道来。如果你有任何问题,也可以在留言中回复,我尽力回答。由于这篇文章规模巨大,再加上我一边还在重写代码,更新的进度估计很慢,我估计寒假能把这篇文章写完。 首先,读者需要建立一个这样的概念,计算机围棋的搜索空间是10^700次方,目前为止没有任何一台机器能够解决如此复杂的问题。第二,计算机围棋作为人工智能领域的著名难题,至今仍然没有超过人类...阅读全文

博文 2015-12-23 20:00:00 u012520030

Go并发编程模型:pipeline和cancellation

本文是Go Concurrency Patterns: Pipelines and cancellation的读书笔记: (1)Pipeline定义: What is a pipeline? There’s no formal definition of a pipeline in Go; it’s just one of many kinds of concurrent programs. Informally, a pipeline is a series of stages connected by channels, where each stage is a group of goroutines running the same function. In each stage, ...阅读全文

go的临时对象池--sync.Pool

一个sync.Pool对象就是一组临时对象的集合。Pool是协程安全的。Pool用于存储那些被分配了但是没有被使用,而未来可能会使用的值,以减小垃圾回收的压力。一个比较好的例子是fmt包,fmt包总是需要使用一些[]byte之类的对象,golang建立了一个临时对象池,存放着这些对象,如果需要使用一个[]byte,就去Pool里面拿,如果拿不到就分配一份。这比起不停生成新的[]byte,用完了再等待gc回收来要高效得多。 type buffer []byte // pp是用于存储printer状态的一个结构体 type pp struct { buf buffer arg interface{} value reflect.Value fmt fmt reordered bool goodA...阅读全文

博文 2017-03-07 08:36:36 bigtom

H5响应式网站定制

一般建设网站,要么就是找建站公司帮你做,要么就是自己利用建站工具来做。对于自己利用建站公司来做网站,很多人会遇到很多问题。比如:网站模板怎么设计?网站内容怎么搭建好?网站的结构怎么设计?诸如类似的问题会困扰很多人,也让他们对自建站望而止步了。所以更多人选择定制网站。让专业的人员来帮自己制作网站。一般的网站定制会比较容易,如果是H5响应式网站定制就会比较繁琐,因为响应式网站相比其他网站建设的过程要较为复杂,要通过不断的修改与磨合才能到达定制人的心里目标。 ![timg.jpg](http://studygolang.qiniudn.com/170207/9e18fde589b9c8e3350ad10dd945fcc6.jpg) 对于H5响应式网站可能你会疑惑,这是一个什么类型的网...阅读全文

go 反射

// reflect.go package main import ( "fmt" "reflect" ) type Bird struct { Name string LifeExpectance int } func (b *Bird) Fly() { fmt.Println("I am flying...") } func main() { sparrow := &Bird{"SParrow", 3} s := reflect.ValueOf(sparrow).Elem() typeOfT := s.Type() for i := 0; i < s.NumField(); i++ { f := s.Field(i) fmt.Printf("%d: %s %s = %v\n", i, t...阅读全文

博文 2017-05-03 16:00:24 痞子汤

Go (interface)接口

// interface.go package main import ( "fmt" ) type Phone interface { call() } type NokiaPhone struct { } type IPhone struct { } type Android struct { } func (nokia NokiaPhone) call() { fmt.Println("I am Nokia!") } func (ios IPhone) call() { fmt.Println("I am IPhone!") } func (and Android) call() { fmt.Println("I am Android!") } func main() { var ph...阅读全文

博文 2017-05-06 15:00:35 痞子汤

go语言实现斐波数列

斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) 递归实现 package main import "fmt" func fibonacci(num int) int{ if num<2{ return 1 } return fibonacci(num-1) + fibonacci(num-2) } func main(){ for i := 0; i<10; i++{ nums := fibonacci(i) fmt.Println(nums) } } 闭包实现 package main import "fmt" func f...阅读全文

博文 2016-08-30 05:00:00 chenxun2009

Golang 优化之路——Cantor pair

写在前面 某一种对象是通过两个ID唯一确定的,如何处理这种数据结构以便快速查找以及节约内存?先说一种笨方法——用字符串来处理。这是比较容易想到的(我觉得一般最容易想到的也是最简单粗暴的方法都是用字符串来搞搞搞)。 fmt.Sprintf("%d_%d", id1, id2) 这样就成了。存储的时候用字符串来保存,查询比较的时候用字符串的方法来计算。当然,把数字当作字符串来保存和计算本身就是极其浪费内存和CPU的。 Cantor pairing function 简介 康托尔配对 - Cantor pairing function,是一种将两个自然数转成唯一一个自然数的方法。具体原理我就不说了,我也看不懂。。。简单地说: 只支持自然数。自然数是整数(自然数包括正整数和零); 支持反解; f(k...阅读全文

Go 采用 goroutine 和 channel 实现工作池

假设有一组任务需要异步处理且量很大,那我们需要同时开启多个 worker 以保证任务的处理速度而不会堵塞任务。其他语言,可能会需要开启多进程来完成,多进程的控制、IO 消耗等会是个需要注意的问题,而这些 Go 都能帮我们很轻易的解决。 大致的实现要点和流程: 创建2个信道,messages 用于传送任务消息,result 用于接收消息处理结果 创建3个 Worker 协程,用于接收和处理来自 messages 信道的任务消息,并将处理结果通过信道 result 返回 通过信道 messages 发布10条任务 通过信道 result 接收任务处理结果 示例代码: package main import ( "fmt" "strconv" "math/rand" "time" ) type M...阅读全文

博文 2018-05-31 11:34:38 舆图易稿

如何在 Go 中优雅关闭子进程

有时我们会遇到这样的需求,在一个主进程中启动另外一个进程,而在 Go 中可以使用 exec 包的 Cmd 来轻松实现这类需求,例如代码: package main import ( "fmt" "log" "os" "os/exec" "os/signal" ) func main() { cmd := exec.Cmd{ Path: "nc", Args: []string{"-u", "-l", "8888"}, Dir: "/usr/bin", } if err := cmd.Start(); err != nil { log.Panic(err) } fmt.Println("Start child process with pid", cmd.Process.Pid) c := m...阅读全文

golang 实现递归

package main import "fmt" func Recursive(n int) int {if n == 0 {return 1}//相当于10987654321 return n Recursive(n-1)}func main() {fmt.Println(Recursive(10))} 执行结果:sf@SFdeMacBook-Pro  ~/Documents/project/src/test  go build Recursive.gosf@SFdeMacBook-Pro  ~/Documents/project/src/test  ./Recursive362880...阅读全文

博文 2018-09-21 22:36:39 IT职场小白

golang md5 结果类型

golang md5 结果类型 1 package main 2 3 import ( 4 "crypto/md5" 5 "encoding/hex" 6 "fmt" 7 ) 8 9 func main() { 10 data := []byte("testing") 11 b := md5.Sum(data) 12 fmt.Println(string(b)) //错误,不能直接转 string 13 // fmt.Println(hex.EncodeToString(b[:])) 14 // fmt.Println(b[:]) 15 } # command-line-arguments GoProjcet/src/exercise/test_md5.go:12: cannot conve...阅读全文

博文 2017-09-02 07:30:03 DillGao

go语言实现斐波数列

斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) 递归实现 package main import "fmt" func fibonacci(num int) int{ if num<2{ return 1 } return fibonacci(num-1) + fibonacci(num-2) } func main(){ for i := 0; i<10; i++{ nums := fibonacci(i) fmt.Println(nums) } } 闭包实现 package main import "fmt" func f...阅读全文

博文 2016-08-30 01:00:05 chenxun2009

Go for循环

9. 循环 循环语句是用来重复执行某一段代码。 for 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环。 for 循环语法 for initialisation; condition; post { } 初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 true ,则 {} 内的循环体将执行,接着执行 post 语句。post 语句将在每次成功循环迭代后执行。在执行 post 语句后,条件将被再次检查。如果为 true, 则循环将继续执行,否则 for 循环将终止。(译注:这是典型的 for 循环三个表达式,第一个为初始化表达式或赋值语句;第二个为循环条件判定表达式;第三个为循环变量修正表达式,即此处...阅读全文

golang的Channel

golang的Channel Channel 是 golang 一个非常重要的概念,如果你是刚开始使用 golang 的开发者,你可能还没有真正接触这一概念,本篇我们将分析 golang 的Channel 1. 引入 要讲 Channel 就避不开 Goroutine -- 协程。闲话不说, 直接上个例子 Goroutine demo: package main import ( "fmt" "time" ) func main() { origin := 1 go doSomeCompute(origin) time.Sleep(5 * time.Second) } func doSomeCompute(num int) { result := num * 2 fmt.Println(re...阅读全文