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

golang中os包用法

os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chdir(dir string) error //chdir将当前工作目录更改为dir目录. func Getwd() (dir string, err error) //获取当前目录,类似linux中的pwd func Chmod(name string, mode FileMode) error //更改文件的权限(读写执行,分为三类:all-group-owner) func Chown(name string, uid, gid int) error //更改文件拥有者owner func ...阅读全文

博文 2015-10-18 12:00:05 chenbaoke

【公告】寻找社区日常运营、功能开发、维护 自愿者

本站 2013 年上线以来,得到国内广大 gopher 们的支持,也让我有动力一直开发、维护着。 随着 go 越来越流行,学习 go 的人也越来越多,本社区用户量也越来越大,而我个人的精力有限。为了给社区用户提供更好的服务,希望有自愿者加入社区,一起维护、运营本站。招募的自愿者包括: 1. 日常网站运营 —— 比如晨读文章推荐、周推荐等;**特别欢迎在校大学生;** 2. 功能开发、维护 —— 参与开发本站功能;板块维护、管理者等; 3. 活动组织、宣传者 —— 组织社区用户参与互动,和外界联系拉赞助等; 4. 翻译 —— Go 相关教程、文章、资讯等的翻译; 其他你想到的,也可以和我沟通~ 根据情况,会提供奖励~ 项目开源的,参与开发,可以直接 fork + ...阅读全文

Go语言 unsafe的妙用

unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象,uintptr类型的目标会被回收。golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存,但由于golang不支持直接进行指针运算,所以用起来稍显麻烦。 切入正题。利用u...阅读全文

博文 2014-10-14 10:00:01 abv123456789

go文件操作函数

文件操作 golang的文件操作时在os包中的。 所以用的时候要import os包 包含以下的这些函数 func Create(name string) (file *File, err error) 直接通过纹面创建文件 func NewFile(fd uintptr, name string) *File func Open(name string) (file *File, err error) 以只读方式打开一个存在的文件,打开就可以读取了。 func OpenFile(name string, flag int, perm FileMode) (file *File, err error) ...阅读全文

[Golang]妙用channel

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

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

妙用GO信道(channel)

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

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

如何基于Go搭建一个大数据平台

大家下午好!我是来自七牛云大数据团队的党合萱。今天向大家介绍一下我们是如何基于Go搭建大数据平台的。七牛的大数据的产品——Pandora首先介绍一下七牛的大数据的产品——Pandora,我们的目的是提供简单、高效和开放的大数据平台。图 1 是我们的工作流,提供实时计算和离线计算。我们的数据流实时进来之后可以到下游的实时数据服务,最常见的场景是提供日志搜索和机器性能监控,就是看到的仪表盘(图2),还有就是基于 spark 做一些实时数据分析。 图1图 2图 3图 4 是整个Pandora业务上的架构图。数据打进系统之后先落地到消息队列,落地之后有一个计算任务,数据经过计算之后还可以再次落地到消息队列。这个过程很灵活,比如可以选择最左边的一条线把数据直接倒出到下游的系统,图1上的示例是一个HTT...阅读全文

博文 2017-10-18 01:15:33 党合萱

Golang,kafka实现消息推拉

Kafka的安装与启动 kafka中涉及的名词 消息记录:由一个key,一个value和一个时间戳构成,消息最终存储在主题下的分区中,记录在生产中称为生产者记录,在消费者中称为消费记录。Kafka集群保持了所有发布的消息,直到它们过期,无论消息是否被消费了,在一个可配置的时间段内,Kafka集群保留了所有发布的消息。比如消息的保存策略被设置为2天,那么在一个消息被发布的两天时间内,它都是可以被消费的。Kafka的性能是和数据量无关的常量级的,所以保留太多数据并不是问题 生成者:生产者用于发布消息 消费者:消费者用于订阅消息 消费者组:相同的groupID的消费者将视为同一个消费者组,每个消费者都需要设置一个组id,每条消息只能被consumer group中的一个Consumer消费,但是可...阅读全文

博文 2019-01-25 14:34:47 Carrism

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

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

GO中调用redis时,当并发量比较大时出现的问题。

GO中调用redis时,实始化一个连接池,做法也是一般的用户: ```go &redis.Pool{ MaxIdle: beego.AppConfig.DefaultInt("redis::maxidle", 1), MaxActive: beego.AppConfig.DefaultInt("redis::maxactive", 10), IdleTimeout: time.Duration(beego.AppConfig.DefaultInt64("redis::idle_time_out", 180)) * time.Second, Dial: func() (redis.Conn, error) { log.Println("func dia...阅读全文

golang 防知乎 中文验证码 源码

创,转载请注明出处! 最开始用图形来模仿文字进行各种角度的倒立和排列,后来切换为文字后,有很多问题。总结如下: 1、程序在画图形和画文字方面不一样,图形的是从原点开始(0,0),而文字则从文字的基线开始(0,baseline) 2、在增加角度偏移时,文字或图形的高宽会产生变化(偏∠45度时达到最大),这时候为了让它们顶点对齐,需要计算偏移量(用三角函数) 3、在绘图时,会先旋转“画布”(描述可能不准确),再绘制文字。此时要往回旋转,否则下一个图形会顺着这个角度继续画。 4、为了让图形保持固定宽度,对于有偏角的文字,需要平均缩小左右间距(否则不同的角度,固定的文字个数,会让图形宽度不同) 效果图: 源码:(代码还可以再整理和优化,但限于计划时间,懒得弄了) package main impor...阅读全文

博文 2018-07-16 15:30:00 Denny_Yang

分布式缓存version_cache

# version_cache version_cache是一个分布式一致性缓存解决方案。 原理:job 将数据打包成版本到redis,实例将存在redis的版本load到本地内存并计算最新版本的生效时间,使所有实例的缓存在同一时间生效来达到所有实例数据的一致。 实用场景:数据量少、非及时生效数据、高并发强一致的场景。如:配置服务,门店服务等 优点: 1. 轻松实现水平扩展,实现千万并发的服务不是梦 2. 数据强一至性,不论启动多少实例,同一时间的数据绝对是一致的(服务器时间一致情况下) 3. 使用简单,实现数据生成接口后就可以像使用缓存一样方便,轻松实现高性能服务 缺点: 1. 数据按版本生效,变更的数据会延迟生效(原则上数据量越小处理越快) 2. 不适...阅读全文

golang的io包

package io import "io" io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。 因为这些接口和原语是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。 Index Variables type Reader type Writer type Closer type Seeker type ReadCloser type ReadSeeker type WriteCloser type WriteSeeker type ReadWriter type ReadWriteCloser type Read...阅读全文

博文 2014-10-04 19:26:40 刘地

golang: 利用unsafe操作未导出变量

看了 @喻恒春 大神的利用unsafe.Pointer来突破私有成员,觉得例子举得不太好。而且不应该简单的放个demo,至少要讲一下其中的原理,让看的童鞋明白所以然。see:http://my.oschina.net/achun/blog/122540 unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uin...阅读全文

博文 2014-10-04 19:26:58 陈一回

热更新配置参数例子(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

Go bytes包

Go bytes包 bytes包基本方法的使用 package main import ( "bytes" ) func writeUInt16(buff []byte, data uint16) { for i := 0; i < 2; i++ { buff[i] = byte(data >> uint(i*8)) } } func spilt(r rune) bool { if r == 'c' { return true } return false } func main() { println("hello world") buff1 := make([]byte, 2) // 创建一个切片 writeUInt16(buff1, uint16(12)) buff2 := make(...阅读全文

博文 2017-02-10 08:00:40 xxggy

Go 语言 bufio 包介绍

[原文链接](https://medium.com/golangspec/introduction-to-bufio-package-in-golang-ad7d1877f762) [bufio](https://golang.org/pkg/bufio/) 用来帮助处理 [I/O 缓存](https://www.quora.com/In-C-what-does-buffering-I-O-or-buffered-I-O-mean/answer/Robert-Love-1)。 我们将通过一些示例来熟悉其为我们提供的:Reader, Writer and Scanner 等一系列功能 ## bufio.Writer 多次进行小量的写操作会影响程序性能。每一次写操作最终都会体现为系统层调用,频繁...阅读全文

博文 2017-12-04 08:18:54 jliu666

百度云主机的优势

在百度上搜索云主机,出现了大量的品牌名称,可谓百花齐放。但对不太懂服务器、建站的小白来说,要在茫茫的云主机海洋中选出一款适合自己的,实在是太困难了。在选择之前,大家不妨先做点功课,了解一下云主机的相关知识。 首先,什么是云主机呢?云主机又叫云虚拟主机,是在一个云服务器上划分出来的100M、200M等不同型号的小型空间,每个用户都有一个独立的IP,用来安放你做好的网站供用户访问,云主机比普通虚拟主机更稳定。 度娘上有包括阿里云、腾讯云、360云、百度云在内的数十种xx云主机,如果是完全没有经验的人进行选购,估计真的要选择困难了,因为这几个品牌,除开“云”字,看上去都挺靠谱的,质量自然不用担心了,效果怎么样呢? 众所周知,百度是目前中国使用率最高的搜索引擎,我们所做的一切关于...阅读全文

freetype-go学习

freetype-go的源码在这里https://code.google.com/p/freetype-go/ 它的作用是生成带文字的png图片 首先解决的几个概念: 什么是FreeType? FreeType是一个可移植的,高效的字体引擎。 字体在电脑上的显示有两种方式:点阵和矢量。对于一个字,点阵字体保存的是每个点的渲染信息。这个方式的劣势在于保存的数据量非常大,并且对放大缩小等操作支持不好。因此出现了矢量字体。对于一个字,矢量字体保存的是字的绘制公式。这个绘制公式包括了字体轮廓(outline)和字体精调(hint)。字体轮廓使用贝塞尔曲线来绘制出字的外部线条。在大分辨率的情况下就需要对字体进行精调了。这个绘制字的公式就叫做字体数据(glyph)。在字体文件中,每个字对应一个glyph...阅读全文

博文 2014-10-20 23:12:53 yjf512

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 毛, 剑

beego ORM建表

开发http后台时用了beego这个框架,牵涉到数据库,就用了ORM模块。 目前的用法是在init里面建表,但是来的数据量很大,所以过一阵表格就会有很多记录。这样就希望过一段固定时间就生成新的表格,后续的数据写在新表格内(表格字段不变,但名字有细微变化),旧表格仅作统计查询使用。 这个功能不知道怎么实现,有了解的大大给指点一下啊,多谢多...阅读全文

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

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

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的提供的同步机制有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:有趣的 channel 应用

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

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

Go unsafe包

Go unsafe包 unsafe包概述 直到现在(Go1.7),unsafe包含以下资源: 三个函数: // unsafe.Sizeof函数返回操作数在内存中的字节大小,参数可以是任意类型的表达式,但是它并不会对表达式进行求值. // 一个Sizeof函数调用是一个对应uintptr类型的常量表达式, // 因此返回的结果可以用作数组类型的长度大小,或者用作计算其他的常量. func Sizeof(x ArbitraryType) uintptr //函数的参数必须是一个字段 x.f, 然后返回 f 字段相对于 x 起始地址的偏移量, 包括可能的空洞. func Offsetof(x ArbitraryType) uintptr //unsafe.Alignof 函数返回对应参数的类型需要...阅读全文

博文 2017-02-17 11:00:19 xxggy

Go io包

Go io包 Go io包的接口概览 io.Writer interface // Writer 接口包装了基本的 Write 方法,用于将数据存入自身。 // Write 方法用于将 p 中的数据写入到对象的数据流中, // 返回写入的字节数和遇到的错误。 // 如果 p 中的数据全部被写入,则 err 应该返回 nil。 // 如果 p 中的数据无法被全部写入,则 err 应该返回相应的错误信息。 type Writer interface { Write(p []byte) (n int, err error) } 我们可以通过查看标准库文档,列出实现了io.Reader或io.Writer接口的类型(导出的类型): os.File 同时实现了io.Reader和io.Writer s...阅读全文

博文 2017-02-12 12:00:25 xxggy

Go-unsafe详解

package unsafe // ArbitraryType is here for the purposes of documentation only and is not actually // part of the unsafe package. It represents the type of an arbitrary Go expression. type ArbitraryType int // Pointer represents a pointer to an arbitrary type. There are four special operations // available for ty...阅读全文

博文 2016-02-05 04:00:01 shuanger_

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

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

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

专访iDST华先胜:城市大脑,对城市的全量、实时认知和搜索

摘要: 对外界而言,城市大脑是一个熟悉而又神秘的项目,如果用一个通俗而又古老的词来描述,它就是智慧城市,但事实上城市大脑已经远远超越了大家通常谈论的智慧城市... 编者按:10月11-14日,为期四天的2017杭州云栖大会(门票火热抢购中!)将再度在杭州云栖小镇起航,作为全球最具影响力的科技展会之一,本届大会将有不少阿里集团专家以及各企业行业领袖的精彩演讲。从今天开始,云栖社区将会对大会嘉宾做一系列专访,想了解嘉宾以及最新议题信息请关注“云栖大会”公众号。第一位嘉宾我们采访的是IEEE Fellow,国家千人,阿里巴巴 iDST副院长华先胜,他将在10月的云栖大会上分享关于计算机视觉领域的前沿趋势以及城市大脑最新的进展。 在7月底结束的全球计算机视觉顶级会议——CVPR 2017...阅读全文

Go 性能优化技巧 8/10

尽管反射(reflect)存在性能问题,但依然被频繁使用,以弥补静态语言在动态行为上的不足。只是某些时候,我们须对此做些变通,以提升性能。 为便于阅读,以下示例均做了最大程度精简。 ![reflect1](http://studygolang.qiniudn.com/160607/116ce59acc17ca3eb189fcf74dadca3b.jpg) 如果是 reflect.Type,可将其缓存,避免重复操作耗时。但 Value 显然不行,因为它和具体对象绑定,内部存储实例指针。换个思路,字段相对于结构,除名称(name)外,还有偏移量(offset)这个唯一属性。利用偏移量,将 FieldByName 变为普通指针操作,就可以实现性能提升。 ![reflect2...阅读全文

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

Golang:有趣的 channel 应用

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

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

前阿里高管“下海”创业,做了一只全球卖断货的“水杯”

《创业大学》第三期---对话Gululu创始人兼CEO江志强 如果一款儿童智能水杯的在线时长超过这个孩子在iPAD花的时间,其商业潜力是不是会有更多的想象空间? 没错,这个售价在129美元的智能互动水杯Gululu,已经在全球各个国家快卖断了货——Gululu创始人兼CEO江志强6月份做客上海云栖大会·阿里巴巴创新创业论坛,分享了“一只水杯”与“淘富成真”的故事。 一位“童心未泯”的“老兵” 46岁的江志强看上去还像个小伙子,梳着大背头,穿着得体时尚。会议开始前早早到场check演讲ppt播放情况。两年前决定创业前,他已经在互联网行业摸爬滚打了快20年,先后任职网易营销副总裁、阿里巴巴集团副总裁和人人公司首席营销官,参与过人人纽交所上市。正是这样...阅读全文

B站日志系统的前世今生

作者简介王翔宇Bilibili资深运维研发工程师。曾就职于百度、饿了么,2017年加入B站,负责B站日志平台的设计和开发工作。B站的日志系统(Billions)从2017年5月份开始建设,基于elastic stack,面向全站提供统一的日志采集、检索、监控服务。目前集群规模20台机器,接入业务200+,单日日志量10T+。借此机会跟大家分享一些B站在日志系统的建设、演进以及优化的经历。由于经验尚少,抛砖引玉,欢迎大家一起交流讨论。文章主要分为三个部分:原有日志系统,现有系统演进,未来的展望。原有日志系统在Billions之前,B站内部并没有统一的日志平台,基本是业务之间各自为战,既有基于ELK的比较前瞻的方式,又有服务器上使用tail/grep比较基本原始的方式,水平参差不齐。在了解各个产...阅读全文

博文 2017-10-21 08:06:41 王翔宇

Golang同步:条件变量和锁组合使用

条件变量的作用并不是保证在同一时刻仅有一个线程访问某一个共享数据,而是在对应的共享数据的状态发生变化时,通知其他因此而被阻塞的线程。 条件变量与互斥量组合使用 互斥量为共享数据的访问提供互斥支持 条件变量就状态的变化向相关线程发出通知 三种操作方法 等待通知: wait 阻塞当前线程,直到收到该条件变量发来的通知 单发通知: signal 让该条件变量向至少一个正在等待它的通知的线程发送通知,表示共享数据的状态已经改变。 广播通知: broadcast 让条件变量给正在等待它的通知的所有线程都发送通知。 声明 func NewCond(l Locker) *Cond 示例 改造上一节的锁使用代码 Golang同步:锁的使用案例详解 传送门:http://blog.csdn.net/liuxi...阅读全文

博文 2016-01-19 14:00:01 grassroots2011

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

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

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

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

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

golang操作文件的四种方法

golang追加内容到文件末尾 字数349 阅读54 评论0 喜欢2 golang读写文件,网上很多教程了但是今天有个需求,想要把内容追加写到文件末尾google了好久,没有查到研究了一会儿file库,终于让我找到(蒙到)了追加的办法最主要的2个函数: func (f *File) Seek(offset int64, whence int) (ret int64, err error)func (f *File) WriteAt(b []byte, off int64) (n int, err error) Seek()查到文件末尾的偏移量 WriteAt()则从偏移量开始写入 以下是栗子:// fileName:文件名字(带全路径) // content: 写入的内容 func appe...阅读全文

博文 2016-08-31 18:00:01 zhangym

【互联网早报】2017.12.06

## 国内新闻 1.威马汽车获百度领投新一轮融资,累计融资金额已超120亿 http://www.tmtpost.com/2953163.html 2.中国电信飞机上网技术曝光:将采用高通量通信卫星 http://www.cnbeta.com/articles/tech/676767.htm 3.央行:第三季度移动支付业务金额增近四成 网联平台试运行平稳 https://www.leiphone.com/news/201712/rDsY4yemksmgIpBv.html 4.美法院将重审阿里IPO欺诈案 被指隐瞒假货监管信息 http://tech.163.com/17/1206/08/D4V7R6JT00097U7...阅读全文

基于 MySQL 的 ID 生成器 idgo

idgo是一个利用MySQL批量生成ID的ID生成器, 主要有以下特点: * 每次通过事务批量取ID,性能较高,且不会对MySQL造成压力. * 当ID生成器服务崩溃后,可以继续生成有效ID,避免了ID回绕的风险. 业界已经有利于MySQL生成ID的方案,都是通过:

REPLACE INTO Tickets64 (stub) VALUES ('a');
SELECT LAST_INSERT_ID();
这种方式生成ID的弊端就是每生成一个ID都需要查询一下MySQL,当ID生成过快时会对MySQL造成很大的压力. 这正是我写这个lib库的原因...阅读全文

开源项目 2015-12-24 16:00:00 flike

深度分析:高频交易软件在硬件是怎么架构的?

首先,高频交易不一定是套利算法。事实上HFT做的最多的业务是做市(market making),可以是把商品从一个交易所倒卖到另一个交易所,也可以是在同一个交易所内部提供某种商品的流动性。这两种方式的共同点都是让人们可以特定地点买到本来买不到的商品,所以本身就是有价值的,收服务费就可以盈利。   二,延迟和流量是不同的概念。低延迟不等于高数据量,事实上大部分时间交易数据流量并不大,一个market一天最多也就几个GB。但HFT系统需要在流量高峰时也能快速响应,所以更看重延迟。这也是HFT系统和互联网系统最大的区别所在,HFT系统的精髓在于把单机的软硬件系统的性能发挥到极致,而不是像互联网那样强调高负载和延展性,动辄用几千台机器搭集群的做法在这里是不适用的。用互联网系统的性能指标来认知H...阅读全文

[翻译]编译器(7)-扫描

文在此。 ————翻译分隔线———— 编译器(7)-扫描 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 现在终于可以开始在扫描器上工作了。 词法分析 那么,从哪里开始呢? 这是最难的一部分,对我来说,扫描看起来应该挺简单的,但是很快我就迷失在细节里。有许多种实现扫描器的方法,我只会向你展示其中的一种。这里是 Rob Pike 在一次演讲中的演示文稿,是关于另外一种很酷的方法:在 Go 中的词法扫描。 扫描器的基本原理就是从顶到底、从左到右、直到源代码的结尾进行检索。每次,发现所需要的元素,就报告词法串被找到,标识符会告诉解析器它是什么,以及找到它的位置。 有限状态机 我现在不会真正深入到...阅读全文

博文 2014-10-09 16:20:24 mikespook

golang专有的gob序列化性能分析

为什么要分析gob序列化格式的性能 我自己编的一个单向同步软件(https://gitee.com/rocket049/mysync),混合了RPC和HTTP服务器功能,利用RPC做控制功能,HTTP进行数据上传。最近我有意简化其构造,把其中的http上传功能也用RPC方式实现。但是我担忧会导致性能下降,因为通常对象序列化,将会导致数据量增加,例如JSON序列化后,二进制数据变成16进制数据,数据量倍增。因此我测试了gob序列化前后的体量变化。 测试方法 我编写了一个小程序,参数是输入文件,把这个文件转换为一个结构体,其中包含文件名(strring)和所有数据组成的数组([]byte),然后用golang标准库encoding/gob将这个结构体序列化后保存到另一个文件中,然后比较输入文件和...阅读全文

博文 2018-06-17 22:34:39 从火星来

Gevent中信号量的使用

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

go语言之beego框架orm的使用(二)

package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) type User struct { Id int `orm:"auto"` Name string Profile_id int } func init() { orm.RegisterModel(new(User)) orm.RegisterDataBase("default", "mysql", "ta3:ta3@/ta3?charset=utf8") orm.RunSyncdb("default", false, true) } func main() { var ( sSql string e...阅读全文

博文 2015-06-17 23:03:07 zistxym