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

go build和go install的区别

go build通过go build加上要编译的Go源文件名,我们即可得到一个可执行文件,默认情况下这个文件的名字为源文件名字去掉.go后缀。 $ go build hello.go $ lshello hello.go 当然我们也 可以通过-o选项来指定其他名字: $ go build -o mygo hello.go $ lsmygo hello.go 如果我们在go-examples目录下直接执行go build命令,后面不带文件名,我们将得到一个与目录名同名的可执行文件: $ go build $ lsgo-examples hello.go go install与build命令相比,install命令在编译源码后还会将可执行文件或库文件安装到约定的目录下。 go install编译...阅读全文

Go项目目录管理

在Go的官网文档How to Write Go Code中,已经介绍了Go的项目目录一般包含以下几个: src 包含项目的源代码文件; pkg 包含编译后生成的包/库文件; bin 包含编译后生成的可执行文件。 可以通过下面的例子来说明工程目录的组织管理。(Windows 7 64位,go version go1.3.3 windows/amd64) 1. 创建一个库文件 创建一个库文件a.go并保存在scr目录的一个子目录下面。 package myfunc import "fmt" func Afunc(str string) { fmt.Println("a.go is package mufunc.") fmt.Println(str) } 这时候目录结构如下: ...阅读全文

【GoLang笔记】遍历map时的key随机化问题及解决方法

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的。由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的。熟悉hashmap的同学对这个情况应该非常清楚。 所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明。 1. 通过range遍历map时,key的顺序被随机化 在golang 1.4版本中,借助关键字range对Go语言的map做遍历访问时,前后两轮遍历访问到的key的顺序居然是被随机化的! 这个现象在其它语言中是很少见的,比如C语言实现hashmap时,通常会用数组(即一段连续的内存空间)来存key,虽然key的...阅读全文

golang 使用 iota

iota是golang语言的常量计数器,只能在常量的表达式中使用。 iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。 举例如下: 1、iota只能在常量的表达式中使用。 fmt.Println(iota) 编译错误: undefined: iota 2、每次 const 出现时,都会让 iota 初始化为0. const a = iota // a=0 const ( b = iota //b=0 c //c=1 ) 3、自定义类型 自增长常量经常包含一个自定义枚举类型,允许你依靠编译器完成自增设置。 type Stere...阅读全文

博文 2015-01-14 16:55 ghj1976

"go: missing Git command"的解决办法

"go: missing Git command"的解决办法 在使用go get 取资源包的时候出错误: ============================================================ C:\Users\Goopand\Desktop\Workspace\goWork\src>go get github.com/astaxie/beegogo: missing Git command. See http://golang.org/s/gogetcmdpackage github.com/astaxie/beego: exec: "git": executable file not foundin %PATH% ====================...阅读全文

博文 2014-11-13 14:07 Goopand

golang编程之时间编程

golang编程之时间编程 编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。 golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s manu@manu-hacks:~/code/go/self$ date +%s 1385131172 熟悉Linux下C编程的就是time函数的返回值: #include 阅读全文

博文 2015-01-30 09:22 stephen830

golang+websocket

参考资料: 0. 浅谈websocket:http://www.cnblogs.com/whthomas/p/3801147.html 1. golang版websocket源码:http://code.google.com/p/go.net/websocket 2. golang版websocket文档:http://godoc.org/golang.org/x/net/websocket#ex-Handler 3. 测试浏览器是否支持websocket地址:http://www.websocket.org/echo.html 4. 简单的golang版的websocket server:http://www.xinze.me/%E5%9F%BA%E4%BA%8Egolang%E7%9A%...阅读全文

博文 2015-07-22 18:07 hezhixiong

golang 的md5加密

先看实现代码: package main import ( "crypto/md5" "encoding/hex" "fmt" ) func main() { h := md5.New() h.Write([]byte("123456")) // 需要加密的字符串为 123456 cipherStr := h.Sum(nil) fmt.Println(cipherStr) fmt.Printf("%s\n", hex.EncodeToString(cipherStr)) // 输出加密结果 } 代码输入效果: 说明: Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New和Sum函数。 这里直接对一串字符串计算MD5。其中通过md5.New...阅读全文

博文 2015-01-28 16:41 ghj1976

Golang的 signal

在实际项目中我们可能有下面的需求: 1、修改了配置文件后,希望在不重启进程的情况下重新加载配置文件; 2、当用 Ctrl + C 强制关闭应用后,做一些必要的处理; 这时候就需要通过信号传递来进行处理了。golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号;一个是 stop方法用来取消监听。 监听信号 notify方法原型 func Notify(c chan<- os.Signal, sig ...os.Signal) 第一个参数表示接收信号的管道 第二个及后面的参数表示设置要监听的信号,如果不设置表示监听所有的信号。 下面是一个非常简单地例子: package main import ( "fmt" "os" "os/signal"...阅读全文

golang中sublime text中配置goimports

生态go对于import包无法自动添加或者删除,对于某些用户来说很不适应.在sublime text中利用gosublime+goimports很好的解决了这一问题. 1首先确认sublime text安装了Gosublime(安装方法这里不在赘述); 2下载goimports: go get code.google.com/p/go.tools/cmd/goimports 3配置sublime text,配制方法如下:preferences->package settings->gosublime->setting-user中添加如下内容 { "fmt_cmd": ["goimports"] } 4重启sublime text,即可看到可以自动添加程序中缺少的包或者删除程序中多余的包,而不...阅读全文

golang解决cannot convert a (type interface {}) to type *: need type assertion

cannot convert a (type interface {}) to type string: need type assertion cannot convert a (type interface {}) to type *: need type assertion 解决方案: var a interface{} = int(10) var b MyInt = a.(MyInt) 参考: http://stackoverflow.com/questions/19577423/how-to-cast-to-a-type-alias-in-go/1957905...阅读全文

博文 2015-01-10 21:23 u010499721

go语言模块开发概念与cron定时事务模块的使用

参照代码: 引入模块通过import实现 结合go安装包目录: 不难发现src目录用于存放各个模块 关于cron模块的使用,只需下载源码保存至src目录下,使用时引入即可,相比linux 中的 cron,Go 实现的 cron 可以精确到秒 查看下载源码地址:https://github.com/robfig/cron 参考资料: http://blog.studygolang.com/2014/02/go_crontab/ http://www.cnblogs.com/happyframework/p/3322292.htm...阅读全文

嵌入式电路设计必备的知识有哪些?

嵌入式是一个综合性比较强的编程开发语言,既涉及了软件开发相关知识还涉及了硬件相关知识,今天小编将为大家分享几个嵌入式硬件电路设计的几个注意事项。 1、确定电源 电源至于嵌入式系统,好比空气之于人,人呼吸的空气中有二氧化碳和氮气等,这就相当于电源系统中各种杂波,如果期望得到纯净的稳定的电源,还需注意这两个方面: (1)电压 嵌入式系统需要各种量级的电源比如常见的5v、3.3v、1.8v等,为尽量减小电源的纹波,在嵌入式系统中使用LDO器件。如果采用DCDC不仅个头大,其纹波也是一个很头疼的问题。 (2)电流 嵌入式系统的正常运行不但需要稳定足够的电源,还要有足够的电流,因此在选择电源器件的时候需要考虑其负载,建议设计时一般留30%的余量。 如果是多层板...阅读全文

ubuntu下golang+mysql

[GO安装] 本来采用 sudo apt-get install golang 安装,后来发现这样装下来是go1版本,这样后面在编译go-sql-driver插件会有问题。 后来参考参考资料2中所说,从http://www.golangtc.com/download下载对应平台的包。 安装其实很简单,只要简单配置一下环境变量,在.bashrc里增加 export GOROOT=$HOME/bin/go export GOARCH=amd64 #如果是32位就是=386 export GOOS=linux export PATH=${PATH}:$GOROOT/bin export GOPATH=$HOME/devhome/golang/go_demo 然后执行: cd $GOROOT/src...阅读全文

Go On Android

文地址:Go, on Android作者:橙子InfinityGo 语言的高效一直让我想将之用于 Android 的开发上,很多事情,单纯从代码角度考虑,用 Go 来写会方便很多。这篇文章只是一个实例,没啥实质性的意思,只是开发时的一些记录。 我不想说如何获得 Go 的源码或是如何编译之,那些在网上到处可找,推荐直接参考 Go 语言官方网站(http://golang.org/),里面许多有价值的东西。 同样的参考官方网站所述,我们可以将 Go 环境编译为支持 arm 的,使用该环境编译出的程序,也可运行于 Android。 那么先编译 Go 本身,让它可以编译 arm 下的应用,修改一下 .bashrc 文件 在最后加上以下条目 PATH 取决于你的 Go 源码下载到哪里,不一定和我是一样...阅读全文

博文 2013-12-11 14:15 yangying19911113

Golang学习笔记一:语言规范

引言 Golang参考手册,更多内容请参考http://golang.org 语言规范参考自https://golang.org/ref/spec 词汇元素 注释 行注释: // comment content 段注释:/* comment content */ 符号 符号有4类:标识符、关键字、操作符和分隔符、字面常量 分号 golang中,分号可省略 标识符 标识符即程序中的变量和类型,有一个或多个字母或数字组成,第一个字母必须字母开头。 identifier = letter { letter | unicode_digit } 关键字 标识符不能是golang中的保留关键字 break default func interface select case defer go map s...阅读全文

GoAgent原理和实现(一) :基本原理介绍

GoAgent对于每一个可以登上 blogger.com 的孩纸来说也许并不陌生。出于好奇,我准备学习学习它的工作原理,并打算自己动手写一个类似的东西。当然,前提不是照抄了。我打算记录下整个学习和实现它的过程,但由于能力有限,之中难免会出现错误,希望发现的童鞋可以帮忙指正。如果即使自己没能详尽的弄明白它的编程思想和手段,自己也要写出一个可以实现它的功能的近似的东西。 开始之前,我应该感谢一下阮成雄同学。他把GoAgent介绍给了我,才让我实现了“跨过长城,走向世界”的梦想。 如果你没有听说过GoAgent,但平日里苦于无数次的“连接被重置”错误,它将是你的终极解决方案。这里,我不想介绍它的安装和使用过程,需要的同学可以参考GoAgent图文设置教程,或是在code.google.com中搜索...阅读全文

Golang的一致性哈希实现

Golang的一致性哈希实现 一致性哈希的具体介绍,可以参考:http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html 1 import ( 2 "hash/crc32" 3 "sort" 4 "strconv" 5 "sync" 6 ) 7 ​ 8 const DEFAULT_REPLICAS = 100 9 type SortKeys []uint32 10 ​ 11 func (sk SortKeys) Len() int { 12 return len(sk) 13 } 14 ​ 15 func (sk SortKeys) Less(i, j int) bool { 16 return sk[i] < sk[j] 17...阅读全文

博文 2016-04-20 18:25 ldaniel

Go项目目录管理

在Go的官网文档How to Write Go Code中,已经介绍了Go的项目目录一般包含以下几个: src 包含项目的源代码文件; pkg 包含编译后生成的包/库文件; bin 包含编译后生成的可执行文件。 可以通过下面的例子来说明工程目录的组织管理。(Windows 7 64位,go version go1.3.3 windows/amd64) 1. 创建一个库文件 创建一个库文件a.go并保存在scr目录的一个子目录下面。 package myfunc import "fmt" func Afunc(str string) { fmt.Println("a.go is package mufunc.") fmt.Println(str) } 这时候目录结构如下: ...阅读全文

go mobile 得生命周期事件

生命周期事件,就是状态从一个阶段切换成另外一个状态时触发的事件。所以我们可以看到 lifecycle.Event 的定义如下: 生命周期一共有下面四个阶段: lifecycle.StageDead, lifecycle.StageAlive, lifecycle.StageVisible, lifecycle.StageFocused, 具体定义如下图: 一个可以用来分析各个事件先后顺序的代码: // +build darwin linux package main import "log" import "golang.org/x/mobile/app" import "golang.org/x/mobile/event/lifecycle" import "golang.org/x/mo...阅读全文

从面向对象的角度看Go语言与Java语言的区别

Go语言风格 GO语言是支持并发编程和内存垃圾回收的编译型静态类型语言,运行效率高,具有较强的可伸缩性(scalable)。它是为软件工程服务而进行的语言设计,强制语言规范。GO语言的面向对象编程非常简洁优雅,没有继承,隐藏的this指针等。它的面向对象是语言类型系统中的天然的一部分。整个类型系统通过接口串起来浑然一体。 Go语言与JAVA语言的区别 类型系统:JAVA中有两套完全独立的类型系统,一套是值类型系统,byte、int、boolean、char、double另一套是以object类型为根的对象类型系统,Integer,HashMap等。值类型系统希望用object类型引用,则需要装箱。而go语言中多数类型都是值语义,甚至包括一些复合类型如数组(array),结构体(struct)...阅读全文

golang学习之旅:官方文档汇总

The Go Programming Language Specification:http://localhost:8080/ref/spec学习Constants、Variables、Types、Declarations、Built-in functions Effective Gohttp://localhost:8080/doc/effective_go.html学习Data、Concurrency,Data部分讲解了make和new的区别 The Go Memory Modelhttp://localhost:8080/ref/mem Go Slices: usage and internalshttp://localhost:8080/blog/go-slices-usage-a...阅读全文

博文 2015-05-04 22:02 michaellau

Why Go's Declaration Syntax is better than C++?

【Why Go's Declaration Syntax is better than C++?】 Newcomers to Go wonder why the declaration syntax is different from the tradition established in the C family. As descripbed in previous note the C++ use Clockwise/SpiralRule to parse the expression. Go's declaration syntax is more human nature, just read from left to right. Go's type syntax is easi...阅读全文

博文 2015-01-28 10:47 tekkaman

golang中不定参数与数组切片的区别

package main import "fmt" func main() { myfunc1(88, 42, 12, 56) //传递不定数量的参数 myfunc2([]int{88, 42, 12, 56}) //传递一个数组切片 } func myfunc1(args ...int) { //接受不定数量的参数,这些参数的类型全部是int for _, arg := range args { fmt.Println(arg) } } func myfunc2(args []int) { //传递一个数组切片 for _, arg := range args { fmt.Println(arg) } } 参考资料: 《Go语言编程》 2.5.3 不定参...阅读全文

Go学习笔记之变量和常量

1 变量 1-1 声明 在 Go 语言中声明变量使用关键字 var 例如 var int_a int; // 多数情况下分号可以省略 在声明的同时没有初始化值时,Go 会给基础类型设置默认值, int 0 int8 0 int32 0 int64 0 uint 0x0 rune 0 //rune的实际类型是 int32 byte 0x0 // byte的实际类型是 uint8 float32 0 //长度为 4 byte float64 0 //长度为 8 byte bool false string "" 声明的同时也可以赋值初始化,例如 var int_a int =1 声明同时赋值可以简单缩写为 int_a := 1 1-2 多个相同类型的声明 多个相同类型的声明可以简写为 var a...阅读全文

GO语言quicksort实现.快速排序法代码实现

package main import ( "fmt" "math/rand" "time" ) func main() { var z []int for i := 0; i < 1000000; i++ { z = append(z, rand.Intn(100000)) } sort(z) } func sort(list []int) { if len(list) <= 1 { return//退出条件 } i, j := 0, len(list)-1 index := 1 //表示第一次比较的索引位置. key := list[0] //第一次比较的参考值.这里选择第一个数 if list[index] > key { list[i], list[j] = list[j], lis...阅读全文

博文 2015-06-22 21:15 fyxichen

Go项目的目录结构说明

一、项目目录结构GoPath /bin /pkg /src project_1 project_2 ...... project_n GoPath : 相当于donet下的Solution文件夹;需在环境变量中设置,多个用分号隔开即可; bin : 存放编译后的可执行文件; pkg:存放编译后的包文件; src : 存放项目源文件; project_n : 具体项目的源代码目录,相当于donet下的Project文件夹。 示例如下图: 二、在LiteIDE中的目录结构 参考资料: http://www.tiege.me/?p=417&utm_source=rss&utm_medium=rss&utm_campaign=golang-ide-liteide http://blog.studyg...阅读全文

博文 2016-06-02 16:03 wangwangfei

模板中插入golang数据时遇到的问题

今天在模板时想执行一条很简单的语句,然后却碰壁了,左试试右试试都不行,还是通过上网搜索才找到解决方法。 我想在模板里执行或操作的逻辑,即:“if a || b { do something }”;我试过以下几种方式都不行: 1 想在模板里执行或操作逻辑:即:if a || b { do something } 2 (错误1) {{ if .a || .b }} 3 do something 4 {{ end }} 5 (错误2) {{ if .a .b }} 6 do something 7 {{ end }} 8 (错误3) {{ if `.a .b` }} 9 do something 10 {{ end }} 11 …… 12 正确的方式竟然是: 13 {{ if or .a .b }...阅读全文

博文 2015-09-22 17:55 hezhixiong

Go学习记录

平台:Windows 一、下载 二、安装 配置GoRoot环境变量:Go的安装目录 配置GoPath环境变量:Go的工作目录 三、开发环境配置 1、LiteIDE 2、Visual Studio Code 3、Sublime Text 4、Eclipse Go 四、项目结构说明 Go项目的目录结构说明 五、项目目录结构组织 Golang项目目录结构组织 六、Go语言基础 易百Go语言教程 Go语言包详解 七、Go语言中使用MongoDB mgo Guide 0.2 文档 参考资料 Windows下使用Visual Studio Code搭建Go语言环境 Windows下搭建go语言开发环境 以及 开发IDE (附下载链接) 在Visual Studio Code中配置GO开发环境 Windo...阅读全文

go中的闭包

闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。[1]在程序设计中,对象是附有行为的数据,而闭包是附有数据的行为。 下面我们来看一下Go语言中闭包的实际例子: package main import "fmt" func ExFunc(n int) func() { sum := n a := func() { sum++ fmt.Println(sum) //调用本函数外的变量 } return a } func main() { myFunc := ExFunc(10) myAnotherFunc := ExFunc(20) myFunc() //这两句输出11, 12 myFunc() myAnotherFunc() //这两句输出21,22 myAnothe...阅读全文

博文 2015-12-06 21:45 jiaolongdy

Golang精编100题

能力模型 级别 模型 初级primary 熟悉基本语法,能够看懂代码的意图;在他人指导下能够完成用户故事的开发,编写的代码符合CleanCode规范; 中级intermediate 能够独立完成用户故事的开发和测试;能够嗅出代码的坏味道,并知道如何重构达成目标; 高级senior 能够开发出高质量高性能的代码;能够熟练使用高级特性,开发编程框架或测试框架; 选择题 [primary] 下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC [primary] 定义一个包内全局字符串变量,下面语法正确的是 ()A. var str stringB. str := ""C. str = ""D. var str = "" 参考答案:AD [primar...阅读全文

博文 2017.04.19 18:33* _张晓龙_

如何制作自适应网站

自适应网站已经成为现互联网时代的主流网站,自适应网页布局的改革,让网站焕然一新,赋予了网站新的活力与更精美的展现。今天给大家讲下如何利用建站宝盒制作自适应网站。 建站流程:模板设置>基本资料>网站栏目>编辑内容>发布网站>推广网站 1. 进入界面 网站建设 2. 选择网站模板,安装模板 建站宝盒 网站模板 3. 编辑网站 自助建站工具 双击栏目,更改内容 网站制作 点击首页,可以管理更改网站所有内容栏目 网站编辑 4.编辑完成,进行发布 自适应网站 程序代码的建站者而言,使用建站宝盒进行网站建设是一个不错的选择,操作简单方便,无需懂程序编码就能进行自建站。 免费注册...阅读全文

go 单元测试

go 单元测试 go 单元测试 概述 实例 参考文献 概述 go 提供了自动测试的包 testing, 假设我们有一个文件youfile.go,那么建立测试文件的名字为 yourfile_test.go,这个文件中有测试函数,形式如下: func TestXxx(*testing.T) 其中 TestXxx 中 Xxx 的第一个字母 X 必须是大写字母。 将你的源文件 yourfile.go 和 yourfile_test.go 放在同一个目录下。 使用 go test 命令运行 实例 这里使用 https://github.com/golang/example/tree/master/stringutil 的文件测试 stringutil 目录下有两个文件:reverse.go 和 rev...阅读全文

golang连接mysql操作示例增删改查

http://www.01happy.com/golang-mysql-demo/ 下载驱动 sudo go get github.com/go-sql-driver/mysql 如果提示这样的失败信息:cannot download, $GOPATH not set. For more details see: go help gopath,可以使用如下命令解决 sudo env GOPATH=/Users/chenjiebin/golang go get github.com/go-sql-driver/mysql GOPATH的值根据自行环境进行替换。 创建测试表 在mysql test库中创建测试表 CREATE TABLE IF NOT EXISTS `test`.`user` (...阅读全文

博文 2016-07-11 09:03 liukuan73

go JSON

package utils import ( "encoding/json" "errors" ) func JsonToMap(text []byte) (map[string]interface{}, error) { var anonymous interface{} err := json.Unmarshal(text, &anonymous) if err != nil { return nil, errors.New(err.Error()) } res := anonymous.(map[string]interface{}) return res, nil } 参考:https://github.com/astaxie/build-web-application-with-g...阅读全文

博文 2016-08-24 14:47 allenhaozi

Golang 优化之路——空结构

写在前面 开发 hashset 常用的套路: map[int]int8 map[int]bool 我们一般只用 map 的键来保存数据,值是没有用的。所以来缓存集合数据会造成内存浪费。 空对象 空对象是个神奇的东西。它指的是没有字段的结构类型。 type Q struct{} 它牛逼的地方在于: 可以和普通结构一样操作 var a = []struct{}{struct{}{}} fmt.Println(len(a)) // prints 1 不占用空间 var s struct{} fmt.Println(unsafe.Sizeof(s)) // prints 0 声明两个空对象,它们指向同一个地址 type A struct{} a := A{} b := A{} fmt.Println...阅读全文

博文 2017.05.09 14:10* Superman1316

字符串查找算法(二)

接前面的《字符串查找算法》继续写。上一篇文章说过,神奇的数字16777619,当时不知道这个是干嘛用的,现在差不多知道了。 字符串哈希,会经常用到FNV哈希算法。FNV哈希算法如下:将字符串看作是字符串长度的整数,这个数的进制是一个质数。计算出来结果之后,按照哈希的范围求余数,结果就是哈希结果。 #define TRUE_HASH_SIZE ((u_int32_t)50000) /* range top plus 1 */ #define FNV_32_PRIME ((u_int32_t)16777619) #define FNV1_32_INIT ((u_int32_t)2166136261) #define MAX_32BIT ((u_int32_t)0xffffffff) /* lar...阅读全文

Go 语言简单实现HashSet

公司有个需求,就是能够对列表去重。本屌原本想直接用for循环实现,后来去查了查Java的实现方式,大开眼界。 Set,是指数学里的集合。集合当中不能有重复的元素。判断是否有重复,可以使用哈希的方法。Java容器当中有基于哈希实现的HashSet。把元素都放入HashSet当中,如果有重复,则会插入失败。这样就能判断出来是否重复了。 而Golang并没有这种高级的容器。只是找了一个大神实现的,稍微改了一下,能够支持字符串检测。 http://play.golang.org/p/_FvECoFvhq type HashSet struct { set map[string]bool } func NewHashSet() *HashSet { return &HashSet{make(map[s...阅读全文

TODO:Golang UDP连接简单测试慎用Deadline

TODO:Golang UDP连接简单测试慎用DeadlineUDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 1.Golang UDP服务 package main import ( “f...阅读全文

Golang通过邻接表实现有向图

本科学习数据结构的时候就听前辈说过,学好数据结构、计算机组成、操作系统和计算机网络后就会成为大神,我也使劲学过,但是一直没发现数据结构的用处。实际编程用过比较多的就是哈希表了,一般语言也都会通过一些扩展包支持。 《数学之美》第九章——《图论和网络爬虫》,就浅显易懂的介绍了图的实际用途。搜索引擎里面的网络爬虫抓取网络数据,就是把互联网抽象成有向图这种数据结构,通过遍历这张图实现的互联网抓取。 图一般分为有向图和无向图,一般用来开发网络爬虫和地图(我就知道这两个)。图可以认为是节点和连接边的集合,有两种实现方式:邻接表和邻接矩阵。稀疏图用邻接表实现,稠密图用邻接矩阵实现。图的重点在于遍历,有深度优先遍历和广度优先遍历。深度优先遍历可以通过递归实现,而广度优先遍历要转换成类似于树的层序遍历来实现。...阅读全文

安全URL的Base64编码

之前在《网址压缩的调研分析(续)》介绍过Base62算法,他是一种类似于Base64的哈希算法。今天发现了另一种优化的Base64算法,又参考了下Golang的源码,在encoding/base64/base64.go里面。 const encodeStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 传统的Base64用的是A-Z、a-z、0-9,还有+和/,一个64个编码串。 然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通...阅读全文

Go语言的Json管理模式

在Go语言中Json管理是一个微不足道的问题,但是也会出现少数不可避免的问题: 如何为字段提供默认值? 如何使一个字段可选? 如何避免使用某些字段的默认值 (如 ︰ 用户 id)? 如何防止指针维护的问题 如何验证? 下面一些示例演示如将一个Struct解析成一个Json文档 我们来看一个在我们在日常开发中常用的一个Model,a User, a Scene, a Parcel,Models能够Marshaled Json,同样Json也能Unmarshaled为Models。在所有程序中,我们需要验证传入的Json。 当我们要把一个Json解析成Model的时候,我们利用结构标记来表示字段名称,比如我们可以用”omitempty”,来告诉程序我们是否忽略这个字段当它的值为空的时候。 typ...阅读全文

Go泛型提案

Go泛型特性已经被讨论了多次了1, Andrew Gerrand现在把这个提案加入到了Go的issue列表中2,并标记为Go2标签。当然这不代表着要将泛型加入到Go中,而是演示一个完整的提案应该是什么样子。 以下是提案的内容: Proposal: Go should have generics Author: Ian Lance Taylor Created: January 2011 Last updated: April 2016 Discussion at https://golang.org/issue/15292 Abstract Go should support some form of generic programming.Generic programming enabl...阅读全文

博文 2016年04月14日 smallnest