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

妙用GO信道(channel)

channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述: 信道提供了一种机制,它在两个并发执行的函数之间进行同步,并通过传递(与该信道元素类型相符的)值来进行通信。 这个个描述又乏味、又枯燥。在我第一次阅读的时候,完全不明白这到底是个什么玩意。事实上,可以认为 channel 是一个管道或者先进先出队列,非常简单且轻量。channel 并不是 Golang 首创的。它同样作为内置功能出现在其他语言中。在大多数情况下,它是一个又大、又笨、又复...阅读全文

博文 2017-03-14 06:00:55 云迹

[Golang]妙用channel

channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述:信道提供了一种机制,它在两个并发执行的函数之间进行同步,并通过传递(与该信道元素类型相符的)值来进行通信。这个个描述又乏味、又枯燥。在我第一次阅读的时候,完全不明白这到底是个什么玩意。事实上,可以认为 channel 是一个管道或者先进先出队列,非常简单且轻量。channel 并不是 Golang 首创的。它同样作为内置功能出现在其他语言中。在大多数情况下,它是一个又大、又笨、又复杂的消...阅读全文

博文 2015-03-06 16:00:02 abv123456789

golang 创建守护进程

package main import ( "os" "os/exec" "path/filepath" ) if os.Getppid()!=1{ //判断当其是否是子进程,当父进程return之后,子进程会被 系统1 号进程接管 filePath,_:=filepath.Abs(os.Args[0]) //将命令行参数中执行文件路径转换成可用路径 cmd:=exec.Command(filePath,os.Args[1:]...) //将其他命令传入生成出的进程 cmd.Stdin=os.Stdin //给新进程设置文件描述符,可以重定向到文件中 cmd.Stdout=os.Stdout cmd.Stderr=os.Stderr cmd.Start() //开始执行新进程,不等待新进程退...阅读全文

博文 2015-06-17 20:15:59 ghost911_slb

golang继承,和多态

package main type ST struct{ } func (s *ST)Show(){ println("ST") } func (s *ST)Show2(){ println("ST:Show2()") } type ST2 struct{ ST I int } func (s *ST2)Show(){ println("ST2") } func main() { s := ST2{I:5} s.Show() s.Show2() println(s.I) } golang语言中没有继承,但是可以依靠组合来模拟继承和多态。 但是,这样模拟出来的继承是有局限的,也就是说:在需要多态的时候,需要小心。 $(function () { $('pre.prettyprint code'...阅读全文

博文 2016-06-22 19:00:01 qq_26847293

Go获取命令行参数及信号量处理

部署golang项目时难免要通过命令行来设置一些参数,那么在golang中如何操作命令行参数呢?可以使用os库和flag库。 golang os库获取命令行参数 os可以通过变量Args来获取命令参数,os.Args返回一个字符串数组,其中第一个参数就是执行文件本身。 1 2 3 4 5 6 7 8 9 10 package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) } 编译执行后执行 $ ./cmd -user="root" [./cmd -user=root] 这种方式操作起来要自己封装,比较费时费劲。golang提供了flag库,可以很方便的操作命名行参数,下面介绍下flag的用法。 golang fla...阅读全文

博文 2015-08-22 12:00:00 kenkao

Golang:有趣的 channel 应用

严格意义上说,本文是我另外一片文章《Golang Funny: Play with Channel》的中文版本。不过,毕竟是用中文当母语的,所以就不翻译了,重新按照那个内容写过吧。 channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述: 信道提供了一种机制,它在两个并发执行的函数之间进行同步,并通过传递(与该信道元素类型相符的)值来进行通信。 这个个描述又乏味、又枯燥。在我第一次阅读的时候,完全不明白这到底是个什么玩意。事实上,可以认为 ...阅读全文

博文 2014-10-09 16:17:36 mikespook

关于语音识别你了解多少?

语音识别有哪些功能 语音输入系统 1、提取有效的声音信息2、从有效信息识别身份3、声音信号转换成电信号 语音控制系统 通过语音信息与实际内容进行匹配 智能对话系统 智能理解用户的需求 实现过程 转化语音信号 1、语音预处理(语音信号采样、反混叠带通滤波、去除个体发音差异和设备、环境引起的噪声影响等)2、声波------>电信号------>二进制3、语音识别只能找到与说话者发音最为相似的字音。在判断相似性时 ,我们首先需要设定好标准读 比较两个向量之间的夹角大小 ,把特征分析提取的一组随时间而变的特征矢量序列和事先通过学习后存在机器里样本序列进行比较。我们将两个向量相乘再除以他们各自的模得到他们之间的夹角 ,夹角越小 ,向量之间也就越为相似 ,从而语音识别得以找到最接近每个人发音的字形。(模...阅读全文

golang信号量处理

c语言的信号量都很容易理解了,注册回调函数就行了 go中的有所不同,是通过个go程和chan来处理的 func main(){ go signalHandle() //用go程执行信号量处理函数 。。。。处理其他逻辑 } func signalHandle() { for { ch := make(chan os.Signal) signal.Notify(ch, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGUSR2,syscall.SIGHUP) sig := <-ch Utils.LogInfo("Signal received: %v", sig) switch sig { default: Utils.LogInfo("get sig=%v...阅读全文

博文 2015-06-17 20:23:31 ghost911_slb

网易云音乐ncm编解码探究记录

网易云音乐ncm编解码原理 背景 办了个网易黑胶会员,想着整个无损音乐库放walkman里听,不再受流量和音质的苦。万万没想到网易自己搞了个ncm的格式,见都没见过,walkman上没法识别,据说会员过期了还不给播了。 我知道了,这是租赁不是购买,看了下网友们对网易云的口诛笔伐,我倒没啥感觉,黑胶会员这个价格,你说买站内所有音乐版权肯定是不够的,租赁也没啥问题。就是音乐搞租赁这个做法以前没见过不太习惯,我就想在我的随身听上播放ncm仅此而已。 网上有挺多奇技淫巧比如从mv转,从h5元素里抓url等等,感觉都差点意思,想着能不能写个ncm转常见无损格式的软件。为此还去学习了一下音频格式以及编解码的一些基础知识。 研究了大半天,遇到了很多无法逾越的问题,后来在github上发现了有人用c++基于...阅读全文

博文 2019-08-10 23:32:55 欧祎

关于语音识别你了解多少?

语音识别有哪些功能 语音输入系统 1、提取有效的声音信息 2、从有效信息识别身份 3、声音信号转换成电信号 语音控制系统 通过语音信息与实际内容进行匹配 智能对话系统 智能理解用户的需求 实现过程 转化语音信号 1、语音预处理(语音信号采样、反混叠带通滤波、去除个体发音差异和设备、环境引起的噪声影响等) 2、声波------>电信号------>二进制 3、语音识别只能找到与说话者发音最为相似的字音。在判断相似性时 ,我们首先需要设定好标准读 比较两个向量之间的夹角大小 ,把特征分析提取的一组随时间而变的特征矢量序列和事先通过学习后存在机器里样本序列进行比较。我们将两个向量相乘再除以他们各自的模得到他们之间的夹角 ,夹角越小 ,向量之间也就越为相似 ,从而语音识别得以找到最接近每个人发音的字...阅读全文

Go语言 美妙的channel(下)

严格意义上说,本文是我另外一片文章《Golang Funny: Play with Channel》的中文版本。不过,毕竟是用中文当母语的,所以就不翻译了,重新按照那个内容写过吧。 channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述:信道提供了一种机制,它在两个并发执行的函数之间进行同步,并通过传递(与该信道元素类型相符的)值来进行通信。 这个个描述又乏味、又枯燥。在我第一次阅读的时候,完全不明白这到底是个什么玩意。事实上,可以认为 c...阅读全文

博文 2014-10-11 18:00:01 abv123456789

我用 Go 语言做了一个红白机模拟器

本文由 伯乐在线 - JackalHu 翻译,toolate 校稿。未经许可,禁止转载!英文出处:fogleman。欢迎加入翻译小组。 译注:Family Computer(简称 FC)是任天堂(Nintendo)公司发行的家用游戏主机。日版 FC 机身以红色和白色为主,因此在华人圈中又有“红白机”的俗称;欧美版 FC 在欧美则称 Nintendo Entertainment System(简称 NES)。 最近我编写了一个 FC 模拟器。制作这样一个模拟器主要是出于兴趣以及为了从中学习 FC 的工作原理。在这个过程中我学到了很多有趣的知识,于是写下这篇文章同诸位分享我所学到的内容。由于相关的文档已经有很多了,所以这里我只打算讲述一些有趣的特性。请注意,接下来都将是些技术方面的内容。 图1 ...阅读全文

博文 2015-05-28 13:52:44 伯乐在线

Golang:有趣的 channel 应用

严格意义上说,本文是我另外一片文章《Golang Funny: Play with Channel》的中文版本。不过,毕竟是用中文当母语的,所以就不翻译了,重新按照那个内容写过吧。 channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述: 信道提供了一种机制,它在两个并发执行的函数之间进行同步,并通过传递(与该信道元素类型相符的)值来进行通信。 这个个描述又乏味、又枯燥。在我第一次阅读的时候,完全不明白这到底是个什么玩意。事实上,可以认为 ...阅读全文

博文 2014-10-10 19:00:01 kjfcpua

迎接人工智能时代,自动化测试的深度变革

AlphaGo的出色表演让人工智能名声鹊起,而在不久前的全国两会期间,人工智能被首次写入政府工作报告,人工智能再次向人们展示出了它的魅力。毫无疑问,人工智能、万物互联是未来趋势。 人工智能的兴起离不开大数据、云计算和深度学习等技术的突破,而就目前来说,人工智能更多的是用机器人来模拟人的多种行为以及能力。对于测试行业来说,自动化测试的出现,让其早早地镌上了AI的身影,但是,不少自动化系统的搭建都存在一个让人苦恼的问题: 场景: 某公司搭建了自动化测试平台用于App自动化测试,然而App几乎每周都会发布新版本,不断出现的新特性和功能变更,让Tester疲于写测试脚本,相比手工测试,似乎没有节省太多的工作量。 这种情况应该很多团队都能够感同身受,同时,James Whi...阅读全文

热更新配置参数例子(Golang)

在不停止程序的情况下,通过发送USR1或USR2等信号量,触发运行中程序的参数更新处理。当然还可以通过处理如kill等信号量, 让程序正确的处理退出操作。 做了个例子,效果如下。 可以看到通过发出kill -USR1 id号 让对应的程序参数发生了变更。 关于kill的参数值可以通过kill -l列出。 各个终端也提供了很多快捷键来支持特定信息的发送,如最常见的ctrl+c. 但注意,各个终端的快捷键定义可能不一样,而且有些是可以自定义的,这个要注意,在使用前可以用stty -a查出。 附上测试机这两条命令的结果: xcl@xclpc:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SI...阅读全文

博文 2015-06-17 20:04:33 xcltapestry

Golang同步机制的实现

Golang的提供的同步机制有sync模块下的Mutex、WaitGroup以及语言自身提供的chan等。 这些同步的方法都是以runtime中实现的底层同步机制(cas、atomic、spinlock、sem)为基础的, 本文主要探讨Golang底层的同步机制如何实现。 1 cas、atomic cas(Compare And Swap)和原子运算是其他同步机制的基础, 在runtime/asm_xxx.s(xxx代表系统架构,比如amd64)中实现。amd64架构的系统中, 主要通过两条汇编语句来实现,一个是LOCK、一个是CMPXCHG。 LOCK是一个指令前缀,其后必须跟一条“读-改-写”的指令,比如INC、XCHG、CMPXCHG等。 这条指令对CPU缓存的访问将是排他的。 CMP...阅读全文

博文 2017-06-21 04:44:00 无心之祸

Golang 1.3 sync.Mutex 源码解析

sync包给我们方便的提供了一组同步语意相关的标准库,下面我们重点看下sync.Mutex互斥是如何实现的。 我本机源码安装路径在/usr/local/go,这sync.Mutex(golang 1.3版本)涉及到的相关代码主要有: /usr/local/go/src/pkg/sync/mutex.go /usr/local/go/src/pkg/sync/runtime.go /usr/local/go/src/pkg/runtime/sema.goc 首先是mutex.go: // A Mutex is a mutual exclusion lock. // Mutexes can be created as part of other structures; // the zero v...阅读全文

博文 2014-10-17 23:16:51 毛, 剑

golang 信号

//有时候,我们希望 Go 能智能的处理 Unix 信号。例如,我们希望当服务器接收到一个 SIGTERM 信号时能够自动关机,或者一个命令行工具在接收到一个 SIGINT 信号时停止处理输入信息。这里讲的就就是在 Go 中如何通过通道来处理信号。 package main import "fmt" import "os" import "os/signal" import "syscall" func main() { //Go 通过向一个通道发送 os.Signal 值来进行信号通知。我们将创建一个通道来接收这些通知(同时还创建一个用于在程序可以结束时进行通知的通道)。 sigs := make(chan os.Signal, 1) done := make(chan bool, 1) ...阅读全文

博文 2015-04-21 03:00:00 benlightning

golang 并发编程之生产者消费者

golang 最吸引人的地方可能就是并发了,无论代码的编写上,还是性能上面,golang 都有绝对的优势 学习一个语言的并发特性,我喜欢实现一个生产者消费者模型,这个模型非常经典,适用于很多的并发场景,下面我通过这个模型,来简单介绍一下 golang 的并发编程 go 并发语法 协程 go 协程是 golang 并发的最小单元,类似于其他语言的线程,只不过线程的实现借助了操作系统的实现,每次线程的调度都是一次系统调用,需要从用户态切换到内核态,这是一项非常耗时的操作,因此一般的程序里面线程太多会导致大量的性能耗费在线程切换上。而在 golang 内部实现了这种调度,协程在这种调度下面的切换非常的轻量级,成百上千的协程跑在一个 golang 程序里面是很正常的事情 golang 为并发而生,启...阅读全文

博文 2018-03-11 19:34:41 hatlonely

Go语言daemon启动的解决方法.linux平台

1、使用nohup ./commond & 这种方法最简单.2、这种方法可以使用信号.

package main import ( "fmt" "os" "os/signal" "syscall" "time" ) func main() { if os.Getppid() != 1 { args := append([]string{os.Args[0]}, os.Args[1:]...) os.StartProcess(os.Args[0], args, &os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}}) return } go func() { var...阅读全文

博文 2016-02-26 12:00:01 fyxichen

公司编程竞赛之最长路径问题 — 从深度优先搜索算法到贪心算法,再到模拟退火算法

最近产品线举办了一个软件编程大赛,题目非常的有趣,就是在一个9 × 9的格子里,你要和另一个敌人PK,在PK的过程中,你可以吃格子里的果实来提升攻击力。每次可以往正上、正下、正左、正右、左上、左下、右上、右下八个方向走。每次要么连续吃果实要么连续走空白区域,且不能走重复的位置。初始状态如下图所示: ![](http://o7x0ygc3f.bkt.clouddn.com/%E6%9C%80%E9%95%BF%E8%B7%AF%E5%BE%84%E9%97%AE%E9%A2%98-5.png) 为了提升攻击力,我们需要尽可能地一次吃最多的果实,所以路线可以这样规划: ![](http://o7x0ygc3f.bkt.clouddn.com/%E6%9C%80%E9%95%BF...阅读全文

Golang:有趣的 channel 应用

转自 http://www.cnblogs.com/luckcs/articles/2588200.html 严格意义上说,本文是我另外一片文章《Golang Funny: Play with Channel》的中文版本。不过,毕竟是用中文当母语的,所以就不翻译了,重新按照那个内容写过吧。 channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述: 信道提供了一种机制,它在两个并发执行的函数之间进行同步,并通过传递(与该信...阅读全文

Go 开发的跨平台 GameBoy 模拟器GoBoy

GoBoy 是一款跨平台的 Nintendo GameBoy 和 GameBoy Color 模拟器。模拟器可以运行大多数 GB 游戏和一些 CGB 游戏。此外,还提供对颜色和声音的支持。![image](https://static.oschina.net/uploads/space/2018/1123/182821_AK5D_2720166.jpg) ![image](https://static.oschina.net/uploads/space/2018/1123/183202_luzB_2720166.png...阅读全文

开源项目 2018-12-05 09:30:01 网友

Golang并发工具包之信号量(Semaphore)

Go虽然天生的支持高并发,但是有些场景下我们还是需要控制协程同时并发处理的数量,在Java的juc包中已经提供了类似功能的工具类-信号量(Semaphore),它是基于AQS实现的。Go的SDK中并没有提供类似的API,我们通过goroutine和channel实现一个简单的Semaphore,并提供:获取许可(Acquire())、指定时间内获取许可(TryAcquireOnTime)、释放许可(Release())等方法,具体实现如下: type Semaphore struct { permits int // 许可数量 channel chan int // 通道 } /* 创建信号量 */ func NewSemaphore(permits int) *Semaphore { re...阅读全文

博文 2019-12-16 03:32:39 _男猪脚

Golang程序中如何监听并处理信号?

Golang程序中如何监听并处理信号? 当运行一个终端程序或守护(daemon)进程时,经常需要响应来自用户或系统的信号来实现诸如:退出/重启/清理(clean up) 等工作,又或者利用信号通知机制实现一些业务功能,如:更新缓存、发送通知。。。 以下例子将会演示在 golang 中如何监听并处理信号: package main import ( "fmt" "os" "os/signal" "syscall" "time" ) const FILENAME = "go-example.txt" func main() { SignalHandler() CreateFile() for { fmt.Println("- Sleeping") time.Sleep(10 * time.Sec...阅读全文

博文 2018-09-21 09:34:40 字节幂

双轨制会员积分系统

简要的说:双轨制会员积分系统模拟分销,代理的逻辑相互推荐节点的产生1倍增2的原理。 奖金计算已经搞定,方便积分商城,分销融资系统二次开发和扩展。 演示地址:[http://124.173.125.140:2000](http://124.173.125.140:2000/) 用户名:15100000000 密码:123456 **开发和运行环境:** 具备linux系统环境: 安装好 nginx 修改 nginx.local.conf 中的静态文件指向 ( kingbloc.web ) 本地目录 mysql 数据库 redis 缓存工具 更改配置(.ini)文件数据库链接信息 开发语言:golang1.8+ ;数据库映射:XORM 消息系统:Nsq; 键值存储:Et...阅读全文

Gevent中信号量的使用

  greenlet间同步方法:信号量   1.为什么引入信号量;   2.gevent信号量有哪些;   3.编程实现。   为何引入信号量   信号量是一个允许Greenlet相互合作,限制并发访问或运行的低层次的同步原语。   什么是信号量   1.信号量有两个方法   acquire和release。在信号量是否已经被 acquire或release,和拥有资源的数量之间不同,被称为此信号量的范围。如果一个信号量的范围已经降低到0,它会阻塞acquire操作直到另一个已经获得信号量的greenlet作出释放。   2.Gevent信号量   1)Semaphore(也被称为锁);   2)BoundedSemaphor...阅读全文

基于Consul的分布式锁实现

我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问。这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现、基于Zookeeper的实现。本文将介绍一种基于Consul 的Key/Value存储来实现分布式锁以及信号量的方法。 http://blog.didispace.com/spring-cloud-consul-lock-and-semphore-2...阅读全文

剖析Go的读写锁

源码级剖析Go标准库中的sync.RWMutex。 概述RWMutex,读写锁,又称“读写互斥锁”。读写锁简单来说就是可以由任意数量的读者同时使用,或者只由一个写者使用的锁。 读写锁和互斥量(Mutex)类似,但是比起互斥量有着更高的并行性,它允许多个读者同时读取,因此有一些特殊的应用场景。在并发编程的很多场景下,数据的读取可能比写入更加频繁,这时就要允许多个线程同时读取一块内容。 用例Go中,RWMutex的零值是一个未加锁的互斥量。 RWMutex使用起来相对比较简单,这里举一个简单的例子: 12345678910111213141516171819202122232425262728293031package mainimport ( "fmt" "sync" "time")func ...阅读全文

博文 2017-09-28 03:32:13 zablog.me

基于Consul的分布式信号量实现

本文将继续讨论基于Consul的分布式锁实现。信号量是我们在实现并发控制时会经常使用的手段,主要用来限制同时并发线程或进程的数量,比如:Zuul默认情况下就使用信号量来限制每个路由的并发数,以实现不同路由间的资源隔离。http://blog.didispace.com/spring-cloud-consul-lock-and-semphore-2...阅读全文

一个信号量与定时器的例子(Golang)

程序可用来定时执行一些任务,并通过信号量处理,在被强制中断时,也能做相应警告及清理处理. package main //信号量与定时器 //author: Xiong Chuan Liang //date: 2015-2-25 import "fmt" import "os" import "os/signal" import "time" func main() { sigs := make(chan os.Signal, 1) done := make(chan bool, 1) signal.Notify(sigs, os.Interrupt, os.Kill) go func() { sig := <-sigs switch sig { case os.Interrupt: fmt....阅读全文

博文 2015-06-17 20:23:11 xcltapestry

golang的httpserver优雅重启

去年在做golangserver的时候,内部比较头疼的就是在线服务发布的时候,大量用户的请求在发布时候会被重连,在那时候也想了n多的方法,最后还是落在一个github上的项目,facebook的一个golang项目grace,那时候简单研究测试了一下可以就直接在内部使用了起来,这段时间突然想起来,又想仔细研究一下这个项目了。 从原理上来说是这样一个过程: 1)发布新的bin文件去覆盖老的bin文件 2)发送一个信号量,告诉正在运行的进程,进行重启 3)正在运行的进程收到信号后,会以子进程的方式启动新的bin文件 4)新进程接受新请求,并处理 5)老进程不再接受请求,但是要等正在处理的请求处理完成,所有在处理的请求处理完之后,便自动退出 6)新进程在老进程退出之后,由init进程收养,但是会继...阅读全文

博文 2018-03-05 14:22:15 helight

Go语言模拟实现接口

package main import ( "fmt" ) type USB interface { Name() string Connect() } type PhoneConnector struct { name string } func (pc PhoneConnector) Name() string { return pc.name } func (pc PhoneConnector) Connect() { fmt.Println("Connected:" + pc.name) } func Disconnect(usb USB) { if pc, ok := usb.(PhoneConnector); ok { fmt.Println("a usb Disconnecte...阅读全文

博文 2014-12-20 19:00:01 itfanr

golang的一些试验小程序

golang的Map程序: package main import "fmt" type e interface{} func mult2(t e) e { switch t.(type) { case int: return t.(int) * 2 case string: return t.(string) + t.(string) } return t } func add3(t e) e { switch t.(type) { case int: return t.(int) + t.(int) + t.(int) case string: return t.(string) + t.(string) + t.(string) } return t } func localmap(s...阅读全文

博文 2014-10-04 19:27:19 壬癸甲乙

golang继承,和多态

package main type ST struct{ } func (s *ST)Show(){ println("ST") } func (s *ST)Show2(){ println("ST:Show2()") } type ST2 struct{ ST I int } func (s *ST2)Show(){ println("ST2") } func main() { s := ST2{I:5} s.Show() s.Show2() println(s.I) } golang语言中没有继承,但是可以依靠组合来模拟继承和多态。 但是,这样模拟出来的继承是有局限的,也就是说:在需要多态的时候,需要小心...阅读全文

博文 2015-11-27 19:00:31 rufidmx

golang的sync.mutex

文章计划分为以下几部分: 1.什么是锁,锁的粒度,一般锁的实现,常见锁的类型 并发下的同步和互斥 原子操作、信号量、互斥量、读写信号量、自旋锁 2.golang锁的设计思想与演进 3.golang锁设计的底层基础简介 4.golang锁的代码实现与一些流程图 5.吐槽~ 参考资料: 设计演进http://www.cnblogs.com/niniwzw/archive/2013/06/24/3153955.html 一、什么是并发锁 高并发下,如何保证并行的多线程同时访问一片共享内存时不出现问题,加锁就是最简单的一种解决方案,通过保证上锁的原子操作来保证对资源访问权限的控制,其余的内存屏障等途径留待后续整理。 锁在不同场景下可以有很多分类,比如,分为乐观锁(读写锁)和悲观锁(互斥锁) 分为自旋...阅读全文

博文 2019-03-11 19:34:46 黑魔术师

Go语言-信号os.Interrupt和信号syscall.SIGTERM的应用

实例 package main import( "fmt" "os" "os/signal" "sync" "syscall" "time" ) func worker(stop <-chan bool) { for { select { case <-stop: fmt.Println("exit") return default: fmt.Println("running...") time.Sleep(3) } } } func main() { stop := make(chan bool) var wg sync.WaitGroup for i := 0; i < 3; i++ { wg.Add(1) go func(stop <-chan bool) { defer wg.Don...阅读全文

博文 2018-07-02 21:35:13 二郎神六号

HDU Let's go to play

Let's go to play Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 773 Accepted Submission(s) : 213 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Mr.Lin would like to hold a party and invite his friends to this party. He has n friends and each of them can come in a sp...阅读全文

博文 2016-04-02 13:00:08 yao1373446012

App测试-测试环境

在当下app横行的时代,APP测试是一件很重要的事情,那么重中之重则是测试环境了,我们如何将小小的苹果手机和安卓手机实现在内网环境(测试环境)呢? 首先一点毫无疑问,pc机(含mac机)可以任意游走网络环境,因为你可以编辑系统级别的hosts文件,那么对于一项封闭式的苹果手机呢?对于开源的乱七八糟的安卓手机呢? 如何线上线下? 如果线上线下使用的是两套域名系统,且线下的域名在线上能够解析到内网,那就不用操作任何东西了,那么程序猿就要幸苦的改代码,且小测试们也要测两边不同域名了~~呵呵哒! 实现方法借助工具:极路由~~~(非广告狗) 模拟器有模拟器的环境,下面会介绍,那么要是真机(手机线下调试)呢? 极路由中有一个功能插件,可以在路由器中定义hosts指向(如何玩极路由...阅读全文

Golang的通道技巧

计时器及系统负荷均衡 time包中的 time.Ticker结构体,该对象以指定的时间间隔重复向结构体中的通道C发送时间值,通道C对用户只读,该对象可通过工厂函数 time.NewTicker(dur int64) 创建,dur是指定的时间间隔,单位为纳秒(ns)。在使协程周期性执行任务(打印状态日志,输出等)时使用。调用Stop() 使计时器停止,与 select结合如下: time.Tick()函数声明为 Tick(d Duration) <-chan Time,该函数返回的通道不需要关闭,它以 d为周期给返回的通道发送时间,d是纳秒数。可以通过此函数限制处理频率,如果应对的请求不平稳,可以增加一个带缓冲的可读写通道,从chRate中读取处理时钟,在请求暴增时可以快速处理与缓冲数相等的请...阅读全文

博文 2019-08-16 15:34:41 虚竹子

Go语言教程汇总

Go语言中使用panic和recover简化错误处理 Go语言中的单元测试及反向代理 Go获取命令行参数及信号量处理 Go各种类型转换及函数的高级用法 Go语言中Tcp协议粘包问题处理 Go操作mysql实现增删改查及连接池 Go发起Http请求及获取相关参数 Go语言中的复合类型及面向对象思想 版权声明:本文为博主原创文章,未经博主允许不得转载...阅读全文

博文 2015-08-25 16:00:00 kenkao

【转】分享:Flask作者ArminRonacher:我不觉得有异步压力

译者 | 豌豆花下猫@Python猫声明 :本翻译基于CC BY-NC-SA 4.0【2】授权协议,内容略有改动,转载请保留原文出处,请勿用于商业或非法用途。异步(async)正风靡一时。异步Python、异步Rust、go、node、.NET,任选一个你最爱的语言生态,它都在使用着一些异步。异步这东西有多好,这在很大程度上取决于语言的生态及其运行时间,但总体而言,它有一些不错的好处。它使得这种事情变得非常简单:等待可能需要一些时间才能完成的操作。它是如此简单,以至于创造了无数新的方法来坑人(blow ones foot off)。我想讨论的一种情况是,直到系统出现超载,你才意识到自己踩到了脚的那一种,这就是背压(back pressure)管理的主题。在协议设计中有一个相关术语是流量控制(...阅读全文

博文 2020-05-19 10:32:55 此番风景

红黑树 PK 跳跃表 (内存占用,查询性能)1500万数据查询更新1.5万 数据,时间都在100ms以下

跳跃表和红黑树都是常用的数据结构,二者都能实现快速查询 一、跳跃表结构 从图中可以看到, 跳跃表主要由以下部分构成: 表头(head):负责维护跳跃表的节点指针。跳跃表节点:保存着元素值,以及多个层。层:保存着指向其他元素的指针。高层的指针越过的元素数量大于等于低层的指针,为了提高查找的效率,程序总是从高层先开始访问,然后随着元素值范围的缩小,慢慢降低层次。表尾:全部由 NULL 组成,表示跳跃表的末尾。 跳跃表以空间换取时间,来实现快速查找 二、红黑树 红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 1、节点是红色或黑色。2、根是黑色。3、所有叶子都是黑色(叶子是NIL节点)。4、每个红色节点必须有...阅读全文

博文 2019-07-12 17:32:43 单龙攀

Golang 学习摘录

Golang 学习摘录 学过C,python,或者Java之类语言再来学习golang应该是无压力,看看语法就能写。语法上比较特殊的如下: 声明变量并赋值使用 := a, b := 1, 2 //声明变量a,b,并且赋值1,2 a = 2 //a赋值2 if 不需要圆括号,并且可以执行表达式.for语句类似 if x:=1; x<2 { } String()函数<同java的toString(),对象的字符串形式>中如果有对自身的"%s"操作,将导致无穷递归调用。因为"%s"会调用String(),将对象转化为字符串形式。 type MyString string func (m MyString) String() string { return fmt.Sprintf("MyString...阅读全文

博文 2015-11-17 22:00:01 secretx