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

Golang初学者学习资料大汇总

网站教程 GO语言编程 and GO语言开发2048 from 实验楼 Go语言后台应用开发 form 优才网 Go语言第一课 form 慕课网 入门书籍 《Go 入门指南》(《The Way to Go》中文版) 《Go 编程基础》 《学习 Go 语言》 《GO 标准库》: Polaris出品,一本有价值的入门书籍。 《Go Web 编程》 《Go并发编程实战》 and 《Go命令教程》由@特价萝卜 出品。 视频资料 《Go编程基础》视频教程:由@Unknown 出品,与书籍配套。 《Go Web基础》视频教程 《Go名库讲解》视频教程 社区交流 StudyGolang Golang中国 Go友团 其他补充 Go学习笔记 by 雨痕大神 Golang在线开发环境 由Go语言中文网和实验楼共...阅读全文

博文 2015-05-04 14:00:00 严爬爬

理解Golang包导入

自:http://tonybai.com/2015/03/09/understanding-import-packages/ Golang使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。 Golang中包的定义和使用看起来十分简单: 通过package关键字定义包: package xxx 使用import关键字,导入要使用的标准库包或第三方依赖包。 import "a/b/c" import "fmt" c.Func1() fmt.Println("Hello, World") 很多Golang初学者看到上面代码,都会想当然的将imp...阅读全文

博文 2015-06-04 03:00:00 sevenyuan

golang 命令行处理

1.命令行参数(命令行参数是指定程序运行参数的一个常见方式。例如,go run hello.go,程序 go 使用了 run 和 hello.go 两个参数。) package main import "os" import "fmt" func main() { //os.Args 提供原始命令行参数访问功能。注意,切片中的第一个参数是该程序的路径,并且 os.Args[1:]保存所有程序的的参数。 argsWithProg := os.Args argsWithoutProg := os.Args[1:] //你可以使用标准的索引位置方式取得单个参数的值。 arg := os.Args[3] fmt.Println(argsWithProg) fmt.Println(argsWithou...阅读全文

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

Google:C++、Java、Scala、Go四种语言性能对比

谷歌发布了一个研究报告,仔细比较了C + +、Java、Scala和谷歌自己拥有的Go编程语言的性能。 根据谷歌的测试报告(PDF格式),C + +是四种语言中运行速度最快的。 但是该文件同时也指出,优化代码相对困难,这需要相当的努力、熟练的水准,不是平均水平的程序员所能达到。 Go旨在消除至少这个限制一些,但它仍然是年轻的(它首次亮相大约一年,不过前半年只是一种“实验性”语言年),并在大多数谷歌测试中表现出,它落后于C + +以及Java和Scala。 “Go提供了有趣的语言特性:这是一个简洁和标准化的符号,”阅读了报告, GOOGLE创始人罗伯特亨特写下:“[但是]语言编译器仍然是不成熟的:无论是性能和二进制大小方面都反应了该问题。” 这就是说,Go的编译比其他三种语言都要快。 Java...阅读全文

博文 2014-10-11 03:00:00 jianyi7659

Go中使用动态库C/C++库

最近需要做一些在go中使用动态C++库的工作,经常碰到找不到动态库路径这种情况,所以就花点时间,专门做一下实验来了解Go。 一、示例代码目录结构(假设代码根目录为/home/gdc/cgotest): ----|bin: ----|pkg ----|src --------|main ------------|main.go --------|oidb ------------|hello ----------------|hello.go: ----------------|api.h ------------|lib ----------------|libapi.so 二、代码 api.h文件内容: #ifndef __API_H__ #define __API_H__ void he...阅读全文

博文 2014-10-16 11:00:11 xiaogugood

Go语言黑魔法

今天我要教大家一些无用技能,也可以叫它奇技淫巧或者黑魔法。用得好可以提升性能,用得不好就会招来恶魔,嘿嘿。黑魔法导论为了让大家在学习了基础黑魔法之后能有所悟,在必要的时候能创造出本文传授之外的属于自己的魔法,这里需要先给大家打好基础。学习Go语言黑魔法之前,需要先看清Go世界的本质,你才能获得像Neo一样的能力。在Go语言中,Slice本质是什么呢?是一个reflect.SliceHeader结构体和这个结构体中Data字段所指向的内存。String本质是什么呢?是一个reflect.StringHeader结构体和这个结构体所指向的内存。在Go语言中,指针的本质是什么呢?是unsafe.Pointer和uintptr。当你清楚了它们的本质之后,你就可以随意的玩弄它们,嘿嘿嘿。第一式 - 获...阅读全文

博文 2015-04-24 10:45:46 达达

用 golang 1.11 module 做项目版本管理

go 1.11 有了对模块的实验性支持,大部分的子命令都知道如何处理一个模块,比如 run build install get list mod 子命令,第三方工具可能会支持的晚一些。到 go 1.12 会删除对 GOPATH 的支持,go get 命令也会变成只能获取模块,不能像现在这样直接获取一个裸包。 可以用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto。 GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。 GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。 GO111MODULE=auto 在...阅读全文

博文 2018-07-30 23:34:50 yesuu

golang select 退出结束goroutine

开启了多个协程 其中一个协程满足条件后终止select, 原以为其他的协程会在后台系统中继续悄悄运行 直到主进程关闭而关闭 。 做一实验发现select 监听退出 会关闭所有监听的goroutine package main import ( "fmt" "time" ) var stop bool = false func main() { ch := make(chan int, 0) ch2 := make(chan int, 0) defer func() { close(ch) close(ch2) }() go func() { ch <- 1 }() for i := 0; i <= 20; i++ { go func(ch2 chan int) { for { fmt.Pri...阅读全文

博文 2015-01-22 13:00:01 wangxusummer

go install 的工作方式

go install 是Go语言提供的非常方便的编译工具。但是最近在项目使用过程中遇到一些问题,在这里记录一下。 问题 通常情况下,修改了代码之后使用go install编译,运行,都能得到正确的结果。 但是有时候发现,修改了源代码,却没有被重新编译,于是导致许多诡异的问题。 为了弄清楚这个问题,下面用一个简单的例子来做个实验。也顺带把go install的工作方式简单介绍一遍。 简单的代码 现在有一个名叫hello的项目,目录在/tmp/gomain/src/hello/hello.go package main import "github.com/my/human" func main() { human.Say("hello!") }hello项目引用了一个human的第三方包,这个...阅读全文

博文 2014-10-04 19:25:55 tiaotiaoyly

探究golang接口

今天看了《Go 语言中的方法,接口和嵌入类型》所以想对比以前对C/C++相关知识进一步理解golang的接口、指针、参数传递。 接口 根据《Go 语言中的方法,接口和嵌入类型》的描述可以看出,接口去调用结构体的方法时需要针对接受者的不同去区分,即: 接收者是指针*T时,接口实例必须是指针 接收者是值 T时,接口实力可以是指针也可以是值 接口的定义和类型转换与接收者的定义是关联的 文章中的示例是通过接口作为函数参数的方式展现的,这里我直接使用变量来进行实验: package main import "fmt" type Type struct { name string } type PType struct { name string } type Inter iInterface { po...阅读全文

博文 2015-03-13 16:00:02 cnsword

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

mapreduce.go源码浅析 MIT 6.824 Spring

这学期选了《分布式系统导论》,实验部分和MIT 6.824 Spring 2015 一样,请戳, 再加上对我来说很困难的课前reading以及课后作业,压力巨大:( 实验共分5部分,根据助教往年评分来看,难度呈线性递增。 由于MIT提供的代码是由go语言所写,所以在着手实验前,你需要了解一下go,我用的是 AN INTRODUCTION TO PROGRAMMING IN GO 链接, 很薄的小册子, 可以迅速了解go语言的基本语法。 6.824 Lab 1: MapReduce 实验要求, Part 1 需要完成一个完整Word Count程序中的map函数和reduce函数, 第一步当然是读提供的代码, 把mapreduce.go中RunSingle()流程读懂,知道map函数和redu...阅读全文

博文 2015-04-07 01:00:02 b4s1cv8vc

Go 1.5中值得关注的几个变化

在GopherCon2015开幕之 际,Google Go Team终于放出了Go 1.5Beta1版本的安装包。在go 1.5Beta1的发布说明中,Go Team也诚恳地承认Go 1.5将打破之前6个月一个版本的发布周期,这是因为Go 1.5变动太大,需要更多时间来准备这次发布(fix bug, Write doc)。关于Go 1.5的变化,之前Go Team staff在各种golang技术会议的slide 中暴露不少,包括: - 编译器和运行时由C改为Go(及少量汇编语言)重写,实现了Go的self Bootstrap(自举) - Garbage Collector优化,大幅降低GC延迟(Stop The World),实现Gc在单独的goroutine中与其他user gorout...阅读全文

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

Go语言 整数和浮点数性能对比

我们团队使用Go来开发游戏服务端,游戏服务端的战斗逻辑避免不了各种计算,C的编程经验告诉我们整数运算效率比浮点运算高,但是在Go语言中,这两种数据类型的运算效率到底差多少呢?是否有必要把浮点数转换成整数的万分数或者千分数进行运算呢?下面通过实验来对比。 实验代码(github): package labs05 import "testing" func Benchmark_IntAdd(b *testing.B) { var a = 0 for i := 0; i < b.N; i++ { a += 1 } } func Benchmark_Int8Add(b *testing.B) { var a int8 = 0 for i := 0; i < b.N; i++ { a += 1 } }...阅读全文

博文 2015-06-17 23:01:27 abv123456789

godep支持Go 1.5 vendor

godep支持Go 1.5 vendor 八 05 bigwhite技术志 gb, Go, Go1.5, GO15VENDOREXPERIMENT, godep, Godeps, Golang, GOPATH, GOROOT, import, vendor, 包 No Comments Go 1.5 vendor/实验特性出炉后,市面上的go第三方包依赖和管理工具显然都无法与之兼容,除了修改代码,别无它法。市场占有率最大的godep做出了表 率,目前其最新版本(go get github.com/tools/godep)已经初步支持了这一实验特性,即在GO15VENDOREXPERIMENT=1时,将使用vendor 目录(而不是Godeps目录)存放copy的第三方包,并在godep go...阅读全文

博文 2015-08-07 09:14:26 bigwhite

Go 语言中文网 联合 实验楼 送福利

[实验楼](https://www.shiyanlou.com) 是国内领先的IT技术实训平台,采用创新的“在线实验”学习模式,为学生及在职程序员提供编程、运维、测试、云计算、大数据、数据库等最新的IT技术实践课程。 实验楼建设初衷是帮助学习者通过动手实践收获知识,同时体会实验精神。德国教育学家斯普朗格说:“教育的最终目的不是传授已有的东西,而是要把人的创造力量诱导出来”,实验楼设计理念也是如此:从实践切入,依靠交互性、操作性更强的课程,理论学习+动手实践共同激发你的创造力。 实验楼 联合 Go 语言中文网 给 gopher 送福利:**价值 30 元的优惠码**,可以抵扣会员或训练营。 优惠码兑换在 [物品兑换](/gift) 页面。 ...阅读全文

golang 使用 gomail 发送邮件

下面以阿里云邮箱为例, 如果使用的是qq邮箱的话需要把mailConn里面的host改成'smpt.qq.com',user 填写qq邮箱地址, pass需要填写你在qq邮箱设置里面获取到的授权码,qq邮箱需要先去邮箱设置里面开通smtp支持,然后获取授权码。然后就可以用qq邮箱发送了。 安装gomail go get gopkg.in/gomail.v2 package main import ( "gopkg.in/gomail.v2" "strconv" ) func SendMail(mailTo []string,subject string, body string ) error { //定义邮箱服务器连接信息,如果是阿里邮箱 pass填密码,qq邮箱填授权码 mailConn...阅读全文

博文 2018-11-06 18:35:49 woahjknes

《Kotlin 极简教程》第9章 轻量级线程:协程(2)

挂起函数的组合执行 本节我们介绍挂起函数组合的各种方法。 按默认顺序执行 假设我们有两个在别处定义的挂起函数: suspend fun doJob1(): Int { println("Doing Job1 ...") delay(1000L) // 此处模拟我们的工作代码 println("Job1 Done") return 10 } suspend fun doJob2(): Int { println("Doing Job2 ...") delay(1000L) // 此处模拟我们的工作代码 println("Job2 Done") return 20 } 如果需要依次调用它们, 我们只需要使用正常的顺序调用, 因为协同中的代码 (就像在常规代码中一样) 是默认的顺序执行。下面的示例...阅读全文

博文 2017-07-13 07:06:58 华夏商周秦汉唐宋元明清中华民国

GO语言零基础入门资料整理

GO语言跟它名字一样是门比较装逼的语言,鲜有菜鸟初学者教程,所以没有语言基础的话,理解起来会有点困难。闲来没事整理了一个GO零基础入门资料。 安装与简介 因为国内老被墙,被墙之后请在网上直接下载,下载链接 开发环境编辑器 1.Sublime,支持多标签,自动排版,高亮,简单的填补,简单的SHELL直接运行等。 《Ubuntu下使用Sublime Text 2搭建Go开发环境》 《Sublime Text 2搭建Go开发环境(Windows)》 2.vim + gocode 《Go的Vim的高亮和自动补齐》 3.LiteIDE:只用于GO环境开发的编辑器 4.免费的golang在线开发环境:由实验楼与StudyGolang合作提供的在线实验室,可直接通过浏览器访问进行Go语言的学习与编程。 一...阅读全文

博文 2016-01-15 19:00:00 weiyuefei

Go1.5正式版程序性能分析小积累,实验环境windows64

方法一: 使用:set GODEBUG=gctrace=1 / GODEBUG=gctrace=2 直接运行可执行文件:server.exe 格式:gc # @#s #%: #+...+# ms clock, #+...+# ms cpu, #->#-># MB, # MB goal, # P GC # 表示第几次GC @#s 表示程序开始多长时间执行的GC #% 表示程序开始GC时间占用的百分比(percentage of time spent in GC since program start) #+...+# 表示GC执行时CPU阻塞时间和 #->#-># MB 表示GC开始堆大小,结束堆大小,在活跃堆大小 # MB goal 表示目标对大小 # P 表示程序运行时CPU核数 示例 :...阅读全文

博文 2015-09-25 07:00:00 fyxichen

“GO语言中文网实验室”上线,提供Golang在线开发环境。

近日,GO语言中文网与“实验楼”整合双方资源,共同建立了“GO语言中文网实验室”,让用户能够以一种更便捷、更高效、更灵活的方式进行GO语言的开发学习。 实验楼是一家免费的IT在线实训平台,为IT爱好者提供了编程、运维、测试、云计算、大数据、数据库等全面的IT技术动手实践环境。 本次实验楼免费为GO语言中文网提供了Golang在线开发环境,用户在阅读文章时,可以点击文章右侧的Golang在线开发环境,登录实验楼后即可直接进入一个完整的Golang在线开发环境,用户可以在该环境中体验文章中涉及的技术,通过动手实践的方式学习技术文章的真正精髓。 ![](http://studygolang.qiniudn.com/150317/3177ab001d2c5b98d4...阅读全文

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

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

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

Go语言阅读小笔记,来自知呼达达关于unsafe.Pointer的分享.

第一式 - 获得Slice和String的内存数据 func stringPointer(s string) unsafe.Pointer { p := (*reflect.StringHeader)(unsafe.Pointer(&s)) return unsafe.Pointer(p.Data) } func bytePointer(b []byte) unsafe.Pointer { p := (*reflect.SliceHeader)(unsafe.Pointer(&b)) return unsafe.Pointer(p.Data) } 第二式 - 把[]byte转成string package test import "testing" import "unsafe" func ...阅读全文

博文 2015-11-16 10:00:00 fyxichen

golang小程序试验(一)

1. 手动实现append package main import ( "fmt" ) func Append(slice, data []byte) []byte { l := len(slice) total_len := len(slice) + len(data) if total_len >= cap(slice) { total_len = total_len * 2 newslice := make([]byte, total_len) copy(newslice, slice) slice = newslice } for i, k := range data { slice[l+i] = k } return slice } func main() { slice := [...阅读全文

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

Go学习笔记(3)字符串

Go 语言中的字符串以及常用的两个字符串处理包。 二. 字符串 Go语言中的字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。UTF-8 是被广泛使用的编码格式,是文本文件的标准编码,其它包括 XML 和 JSON 在内,也都使用该编码。由于该编码对占用字节长度的不定性,Go 中的字符串也可能根据需要占用 1 至 4 个字节,这与其它语言如 C++、Java 或者 Python 不同。Go 这样做的好处是不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。 Go语言中字符串的可以使用双引号( " )或者反引号( ` )来创建。双引号用来创建可解析的字符串字面量,所谓...阅读全文

博文 2016-01-17 03:00:02 xdjyw

go语言入门

GO语言跟它名字一样是门比较装逼的语言,鲜有菜鸟初学者教程,所以没有语言基础的话,理解起来会有点困难。闲来没事整理了一个GO零基础入门资料。 安装与简介 因为国内老被墙,被墙之后请在网上直接下载,下载链接 开发环境编辑器 1.Sublime,支持多标签,自动排版,高亮,简单的填补,简单的SHELL直接运行等。 《Ubuntu下使用Sublime Text 2搭建Go开发环境》 《Sublime Text 2搭建Go开发环境(Windows)》 2.vim + gocode 《Go的Vim的高亮和自动补齐》 3.LiteIDE:只用于GO环境开发的编辑器 4.免费的golang在线开发环境:由实验楼与StudyGolang合作提供的在线实验室,可直接通过浏览器访问进行Go语言的学习与编程。 一...阅读全文

博文 2015-04-22 17:00:16 u013350878

Golang初学者的资源整理

##网站教程: [GO语言编程](https://www.shiyanlou.com/courses/11) and [GO语言开发2048](https://www.shiyanlou.com/courses/42) from [实验楼](https://www.shiyanlou.com) [Go语言后台应用开发](http://www.ucai.cn/openclass/136) form [优才网](http://www.ucai.cn/) [Go语言第一课](http://www.imooc.com/learn/345) form [慕课网](http://www.imooc.com/) ##入门书籍 [《Go 入门指南》](https://gith...阅读全文

GO语言零基础入门资料整理

GO语言跟它名字一样是门比较装逼的语言,鲜有菜鸟初学者教程,所以没有语言基础的话,理解起来会有点困难。闲来没事整理了一个GO零基础入门资料。 安装与简介 因为国内老被墙,被墙之后请在网上直接下载,下载链接 开发环境编辑器 1.Sublime,支持多标签,自动排版,高亮,简单的填补,简单的SHELL直接运行等。 《Ubuntu下使用Sublime Text 2搭建Go开发环境》 《Sublime Text 2搭建Go开发环境(Windows)》 2.vim + gocode 《Go的Vim的高亮和自动补齐》 3.LiteIDE:只用于GO环境开发的编辑器 4.免费的golang在线开发环境:由实验楼与StudyGolang合作提供的在线实验室,可直接通过浏览器访问进行Go语言的学习与编程。 一...阅读全文

博文 2015-05-04 17:00:00 敲代码的猴子

第一个吃“螃蟹”的人——七牛云存储带你分享Go语言的乐趣

七牛云存储 七牛是一家专注于做云存储技术服务的公司,公司注册成立于2011年中旬(上海七牛信息技术有限公司),其目标是打造互联网数据存储的第一服务提供商。专注是他们的基本理念。尽管七牛还非常年轻,但七牛团队在分布式云计算和存储行业已经积累了超过7年的经验与沉淀。早前在国内大型互联网企业比如金山和盛大都有相关的技术成就,至今仍有相关结晶在投入使用。 七牛依托在云存储领域多年的技术积累,汇集了国内顶尖的技术人才,七牛联合创始人之一许式伟先生曾在2000年主持研发WPS,担任WPS Office 2005首席架构师,以及兼任前金山技术总监,2006年带领创办成立金山存储实验室,并于2009年婉拒Google加盟盛大创新院,主攻存储领域,盛大“祥云计划”(盛大云前身)的发起人。2011年,许式伟和一...阅读全文

博文 2014-10-15 16:00:00 liuzif

Go += 包版本

本文译自 Go += Package Versioning, Go & Versioning 的第 1 部分, 版权@归原文所有. 我们需要将包版本控制添加到 Go. 更确切地说, 我们需要将软件包版本的概念添加到 Go 开发人员和我们的工具的工作词汇表中, 以便在彼此交谈时准确地确定应该构建, 运行或分析哪个程序. go 命令需要能够告诉开发人员具体哪些版本的软件包在特定构建中, 反之亦然. 版本控制可以让我们启用可重复构建, 所以如果我告诉你试用我的程序的最新版本, 我知道你将不仅获得我的代码的最新版本, 而且还包括我的代码所依赖包的精确的同一版本, 所以你和我将构建完全等价的二进制. 版本控制还可以让我们确保明天程序的构建方式与今天的完全相同. 即使有更新版本的依赖, go 命令也不应...阅读全文

博文 2018-02-22 22:49:23 lingchao

Golang实现简单tcp服务器01 -- 概述

概述 Golang作为一门近些年来非常风光的开发语言, 其实用范围很广, 图形界面, web框架, 图像引擎等等.由于其语言特性简化了并发/多核的开发, 受到了很大的关注. 而使用它进行服务器开发, 也是非常高校而简洁的.废话不多说, 本项目实践的目的是使用golang开发一个简单的基于tcp协议的服务器/客户端. 预备知识 首先, 我们需要了解一下golang下的如下包与特性: goroutine goroutine是一种轻量型的线程, 作为golang语言的语言特性, 可以很简单的在golang中进行多线程的开发. 利用go关键字, 我们能把任何一个方法/函数, 放在一个新的goroutine里执行.实验01: 在**实验环境**的**主文件夹**里, 建立一个名为test.go的文本文...阅读全文

博文 2015-06-02 23:00:16 victoriest

【好书推荐】理解Linux进程 —— 示例代码使用 Go 语言实现

## 关于这本书 ## 本书受[理解Unix进程](http://www.duokan.com/book/41446)启发而作,用极简的篇幅深入学习进程知识。 理解Linux进程用Go重写了所有示例程序,通过循序渐进的方法介绍Linux进程的工作原理和一切你所需要知道的概念。 本书适合所有Linux程序员阅读。[在线阅读](http://www.linuxprocess.com/),[PDF下载](https://github.com/tobegit3hub/understand_linux_process/blob/master/understan_linux_process.pdf?raw=true)。 ## 三位好朋友 ## 阅读前介绍三位即将与大家打交道的小...阅读全文

编程实现可靠数据传输原理Go-Back-N

有一个计算机网络的实验,需要模拟GBN的过程,即在本地条件下模拟丢包重传机制。刚看到这个实验时有些不知所措,因为不知道怎样能实现丢包,在本地编程,即使是使用不可靠数据传输UDP的DatagramSocket,由于localhost到localhost走的是回环链路,也就是从客户机的应用层--传输层--网络层 到 服务器的网络层--传输层--应用层,这个肯定无法丢包,也用实验进行验证了(比如连续发送1万个DatagramPacket,发现每一个都被收到了)。 那么问题来了,怎样才能丢包? 通过前面的叙述,可知在链路上丢包是不可能的了,那我们可以从服务器端下手,也就是说,即使服务器收到了某个数据包,也不给客户机发ACK,那么到了客户机设置的定时器后,客户机自然就认为是丢包了。所以可以给服务器设置...阅读全文

博文 2015-12-15 22:00:02 icodeyou

HTTP(S) 路由器fabio

fabio 是一个快速、现代、zero-conf 负载均衡 HTTP(S) 路由器,用于部署 consul 管理的微服务。 fabio 由 eBay Classifieds Group 开发, 用于处理 marktplaats.nl 和 kijiji.it 的流量。Marktplaats 所有的流量都经过 fabio ,每秒有数千个请求,分发于数个 fabio 实例。但我们并没有观察到任何延迟。 特性: * Go 语言单一二进制,没有额外的依赖。 * Zero-conf * 通过后台观察器热重载路由表 * 轮转和随机分布 * Traffic Shaping (send 5% of traffic to new instances) Graphite metrics * 请求跟踪 * W...阅读全文

【eoe专访】七牛云储存创始人:揭开GO语言的神秘面纱

载自:http://www.eoe.cn/news/14952.html 作者: 小白的白 来源: eoe 标签: Go语言揭秘 揭秘Go语言 七牛CEO 许式伟,七牛云存储CEO,曾任盛大创新院资深研究员、金山软件技术总监、WPS Office 2005首席架构师。在接触Go语言后即可被其大道至简、少即是多的设计哲学所倾倒。与团队合著《Go语言编程》。七牛云存储也是国内第一个吃螃蟹的团队,核心服务完全采用Go语言实现。 为此,eoe对这样一个传奇的技术员和团队进行了专访,希望大家看完后能对Go语言有全新的认识,扫除大家学习新技术语言恐怖和障碍。同时许总也谈了如何从一个普通程序员成长为首席架构师,做程序员与做Team Leader与CEO的区别,希望对技术成长和创业感兴趣的开发者有所帮助。 ...阅读全文

博文 2014-10-13 13:00:05 u010646653

理解Docker容器端口映射

在”理解Docker单机容器网络“一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射。即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通过宿主机的P端口访问,就像直接访问Docker容器网络内部容器提供的服务一样。 Docker针对端口映射前后有两种方案,一种是1.7版本之前docker-proxy+iptables DNAT的方式;另一种则是1.7版本(及之后)提供的完全由iptables DNAT实现的端口映射。不过在目前docker 1.9.1中,前一种方式依旧是默认方式。但是从Docker 1.7版本起,Docker提供了一个配置项:–userland-proxy,以让Docker用户决定是否启用docker-proxy,默...阅读全文

博文 2016-02-21 16:13:42 bigwhite

理解Golang包导入

理解Golang包导入 三 09 bigwhite技术志 6g, 6l, fmt, Go, Golang, GOPATH, GOROOT, import, Java, nsq, Package, Python, 包, 标准库, 编译器, 链接器 1 Comment Golang使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。 Golang中包的定义和使用看起来十分简单: 通过package关键字定义包: package xxx 使用import关键字,导入要使用的标准库包或第三方依赖包。 import "a/b/c" import "f...阅读全文

博文 2015-03-12 10:12:43 bigwhite

Go语言关于chan理解的实验

编程这东西如果不自己动手写,很可能就永远也不知道是怎么回事了。 之前学习GO写的一些小工具一直没有用到chan这东西(我是PHP的),搜索了一些文章,发现大神们都写得很精彩、很高深,但我这种小白是看不懂了,只是了解了大概是一种类似线程的机制。 还是不会用,只好自已实践下了: 不得不说代码很烂,不过对我来说够了,主要是理解!执行结果: 如果不用goroutine直接使用thread作为过程函数的话,输出顺序应该是str1...str5。 这里使用goroutine调用thread,可能“线程”启动需要一点时间,因为goroutine启动thread后主线程是不会去管它了,所以先输出了str3。 之后是thread里输出了str1。 然后由于主线程要取出ch,就等待了3秒,输出str2。 接着是...阅读全文

博文 2014-12-19 11:00:01 一曲忧伤

双管齐下,VMware的容器新战略

![alt 文本](http://blog.tenxcloud.com/wp-content/uploads/2015/09/%E5%8F%8C%E7%AE%A1%E9%BD%90%E4%B8%8B-300x155.jpg) VMware在本周的年度VMworld大会上为容器技术推出了一个双管齐下的技术。VMware vSphere Integrated Containers,这是现有vSphere产品的翻新,能够让Docker容器在vSphere VM内运行;而新的VMware Photon Platform是专为定制的Linux环境中运行容器。 通过这种双重策略,VMware希望留住那些想在生产环境中采用容器技术的客户群,同时为“container-first、cloud-f...阅读全文

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 网友

如何关闭数组边界检查

我想用Go来做数值计算,做了一个简单的实验,发现同样的矩阵运算,Go所用的时间是用C的2.5倍左右. 下面是我的编译命令: Go : gccgo -g -O3 *.go; C: gcc -std=c99 -g -O3 *.c 这里,gccgo 后面必须要有参数-g, 为了公平起见,在编译C代码时,我也用了这个参数.我知道Go在引用数组元素时是要进行边界检查的,怎么关闭边界检查?否则,Go是不能胜任大规模的数值运算的...阅读全文

Go 1.5 实现自举、引入并发垃圾收集器

在经历了几个Beta版本和一个rc版本之后,Go 1.5终于正式发布了。这是一个很重要的版本,实现方面有很多变化。因为这个版本仍然遵循Go 1兼容性承诺,开发团队预计,所有的Go程序应该都可以和以前一样编译和运行。二进制和源码包已提供下载。 在实现方面,最大的变化有以下几点: 编译器和运行时是完全用Go语言编写的(还有少量汇编),实现了自举。实现中不再涉及C语言,所以构建时也就不需要C编译器了。 并发的垃圾收集器,可能的情况下,垃圾收集可以和其他goroutine并发进行,可以极大降低响应时间。 默认情况下,Go程序运行时的GOMAXPROCS会被设置为可用的核数,之前默认为1。 对internal packages的支持扩展到所有repositories,不再是仅供核心包...阅读全文

寻求golang工程师,Are you ready to go ?

岗位描述: ##管你是GO还是C/C++,或者是最好的PHP,「够浪就行」 **又到了加需求的季节** --- Web开发工程师和金融系统开发工程师是我们正在寻找的小伙伴之一。 **如果你具备以下技能,并且渴望在一家充满年轻活力的技术型公司快速成长,我们将会用代码感动你。** * 具有高并发系统开发经验,熟悉http、tcp协议, * 了解nginx、 apache、lighttpd或任何一款开源web服务; * 熟悉数据结构与算法,熟悉Redis、Oracle、Mysql等数据库; * 了解Go语言,擅长C/C++加分。金融行业开发经验,或相关系统。 **这里特别欢迎乐于在技术社区分享知识的极客青年,具备文艺特长也将会是不错的加分项。** {我们不生产代码} {这里...阅读全文

Go语言黑魔法

今天我要教大家一些无用技能,也可以叫它奇技淫巧或者黑魔法。用得好可以提升性能,用得不好就会招来恶魔,嘿嘿。 黑魔法导论 为了让大家在学习了基础黑魔法之后能有所悟,在必要的时候能创造出本文传授之外的属于自己的魔法,这里需要先给大家打好基础。 学习Go语言黑魔法之前,需要先看清Go世界的本质,你才能获得像Neo一样的能力。 在Go语言中,Slice本质是什么呢?是一个reflect.SliceHeader结构体和这个结构体中Data字段所指向的内存。String本质是什么呢?是一个reflect.StringHeader结构体和这个结构体所指向的内存。 在Go语言中,指针的本质是什么呢?是unsafe.Pointer和uintptr。 当你清楚了它们的本质之后,你就可以随意的玩弄它们,嘿嘿嘿。 ...阅读全文

博文 2015-04-29 01:00:00 mengyidan1988

【独家】鲜为人知的Google go语言若干细节

Google于不久前发布了一门全新的开源编程语言名为Go。Go语言的设计最早始于2007年9月,设计者包括Robert Griesemer, Rob Pike和Ken Thompson,后来Ian Lance Taylor实现了基于GCC的go编译器gccgo,Russ Rox的加入推动了语言和库的实际可用性。它于2009年9月被官方正式宣布发布,兼容Linux和Mac操作系统。 Go是一门富有表达力的、并发的、具有垃圾回收功能的编程语言。 用Google的话来说:Go实验性地将C或者C++语言的性能、安全性与动态语言如Python的速度结合起来。代码的编译运行接近于C,甚至大规模的二进制编译只需要几秒钟。 Go中不包含的特性有: 1. 异常处理(Exception handling) 2....阅读全文

博文 2015-02-13 09:00:02 zengjiangyou

Go语言 类型断言性能测试

载自达达的博客 在一些通用化的接口设计中,我们不得不用interface{}来代表任意类型,然后在接口内部用类型转换来判断具体类型,从而执行具体逻辑。但是类型判断是有性能代价的,如果能具像化的知道这个性能代价有多大,就可以帮助我们设计接口的时候判断应该怎么设计。 下面是实验代码(github): package labs01 import "testing" type InterfaceA interface { AA() } type InterfaceB interface { BB() } type A struct { v int } func (a *A) AA() { a.v += 1 } type B struct { v int } func (b *B) BB() { b....阅读全文

博文 2015-06-17 23:03:43 abv123456789

goroutine 和 channel 不可滥用

我以前觉得使用 goroutine 和 channel 的性能开销是基本忽略不计的--尤其是和 IO 的性能开销相比--但是最近我做了一个实验,实际验证了下。 我在给[我的课程项目](https://bradfieldcs.com/courses/databases/)做一个[玩具相关的数据库](https://github.com/robot-dreams/zdb2)。一开始,我从 CSV 文件里加载数据表,后来我需要添加一个二进制的表格结构。不幸的是,第一次尝试(加载二进制表格)的效果比加载 CSV 文件差远了。 ``` $ ./csv_scan_benchmark -path table.csv Done scanning 20000263 records after 15.69807...阅读全文

博文 2018-03-09 11:13:18 ArisAries