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

golang中container/list包用法

list是一个双向链表。该结构具有链表的所有功能。 type Element type Element struct { Value interface{} //在元素中存储的值 } func (e *Element) Next() *Element //返回该元素的下一个元素,如果没有下一个元素则返回nil func (e *Element) Prev() *Element//返回该元素的前一个元素,如果没有前一个元素则返回nil。 type List func New() *List //返回一个初始化的list func (l *List) Back() *Element //获取list l的最后一个元素 func (l *List) Front() *Element //获取lis...阅读全文

博文 2015-06-23 02:03:13 chenbaoke

golang数据类型map

1 map简介 map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构。map的读取和设置也类似slice一样,通过key来操作,只是slice的index只能是int类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==与!=操作的类型。 在C++/Java中,map一般都以库的方式提供,比如在C++中是STL的std::map<>,在Java中是Hashmap<>,在这些语言中,如果要使用map,事先要引用相应的库。而在Go中,使用map不需要引入任何库,并且用起来也更加方便。 2 map声明 声明map的语法如下 var map变量名 map[key] valu...阅读全文

博文 2015-06-17 20:17:47 JesseYoung

golang list slice 删除其中一项比对

slice可以动态添加项(使用append()函数),但是没有删除项的函数。变通方法,可以使用slice重新组合的方式删除一个或多个项,slice是引用类型,存的是指针,性能上不会有太多影响,示例如下:package mainimport "fmt"func main() { s := []int{11, 22, 33, 44, 55, 66} // 原始slice i := 2 // 待删除项索引 s = append(s[:i], s[i+1:]...) // 最后面的“...”不能省略 fmt.Println(s) // 数据结果 [11 22 44 55 66]} 有人回答的很好: 这样是可以实现。不过从slice这种数据结构来看,本身并不适合做删除操作。抛开语言,只谈数据结构,我们...阅读全文

博文 2015-06-10 19:00:01 panda1986_meng

golang中strings包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3236300.html strings 包中的函数和方法 // strings.go ------------------------------------------------------------ // Count 计算字符串 sep 在 s 中的非重叠个数 // 如果 sep 为空字符串,则返回 s 中的字符(非字节)个数 + 1 // 使用 Rabin-Karp 算法实现 func Count(s, sep string) int func main() { s := "Hello,世界!!!!!" n := strings.Count(s, "!") fmt.Println(n) //...阅读全文

博文 2016-01-18 23:00:04 chenbaoke

一个新颖简便的golang orm . 容易比较容易上手。

About 一个数据库ORM. How to use? Insert go get github.com/ablegao/orm 例子 //引用模块 import "github.com/ablegao/orm" //mysql 驱动 import _ "github.com/go-sql-driver/mysql" //建立连接 // 参数分别为 名称 , 驱动, 连接字符串 // 注:必须包含一个default 连接, 作为默认连接。 orm.NewDatabase("default" , "mysql" , "user:passwd@ip/database?charset=utf8") //建立一个数据模型。 type UserInfo struct { orm.Object Id i...阅读全文

博文 2015-01-01 08:00:01 Able

Golang中Slice的append详解

在Golang语言中,数据类型不多,但是够用,开发项目过程中,Slice属于最常用的数据结构之一,对其原理理解不清楚,很容易会遗留bug,笔者查询了很多博客资料,对Slice的append原理进行一个总结,如果有写的不清楚不明白之处,请多多包涵,并予以指正。 package main import "fmt" func main(){ s := []int{5} s = append(s,7) fmt.Println("cap(s) =", cap(s), "ptr(s) =", &s[0]) s = append(s,9) fmt.Println("cap(s) =", cap(s), "ptr(s) =", &s[0]) x := append(s, 11) fmt.Println("c...阅读全文

博文 2017-09-05 07:34:51 tomorrowwu

Go 系列教程 —— 22. 信道(channel)

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 22 篇。 在[上一教程](https://studygolang.com/articles/12342)里,我们探讨了如何使用 Go 协程(Goroutine)来实现并发。我们接着在本教程里学习信道(Channel),学习如何通过信道来实现 Go 协程间的通信。 ## 什么是信道? 信道可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流到另一端,通过使用信道,数据也可以从一端发送,在另一端接收。 ## 信道的声明 所有信道都关联了一个类型。信道只能运输这种类型的数据,而运输其他类型的数据都是非法的。 `chan T` 表示 `T` 类型的信道。 信道的零值为 `nil...阅读全文

博文 2018-02-14 09:41:18 heyulong

golang--gin获取post里body的参数

如题,post发送数据有几种形式,form和流是最常用的。特别是在程序里使用httpclients,一般都算通过流发送。在php里,是通过php://input来获取的。在gin中,可以通过c.Request.Body.Read(buf)。具体代码如下: package main import ( "fmt" "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.POST("/events", events) router.Run(":5000") } func events(c *gin.Context) { buf := make([]byte, 1024) n, _ :=...阅读全文

博文 2016-09-10 03:00:03 Manrener

Go 语言运算符

Go 语言运算符运算符用于在程序运行时执行数学或逻辑运算。Go 语言内置的运算符有:算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符接下来让我们来详细看看各个运算符的介绍。算术运算符下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。运算符描述实例+相加A + B 输出结果 30-相减A - B 输出结果 -10*相乘A * B 输出结果 200/相除B / A 输出结果 2%求余B % A 输出结果 0++自增A++ 输出结果 11--自减A-- 输出结果 9以下实例演示了各个算术运算符的用法:package main import "fmt" func main() { var a int = 21 var b int = 10 var c int c =...阅读全文

博文 2015-11-25 19:00:32 u011225629

NSQ:分布式的实时消息平台

NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub,其当前最新版本是0.3.1版。NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用Go和Python库。如果读者兴趣构建自己的客户端的话,还可以参考官方提供的协议规范。 NSQ是由四个重要组件构成: nsqd:一个负责接收、排队、转发消息到客户端的守护进程 nsqlookupd:管理拓扑信息并提供最终一致性的发...阅读全文

博文 2015-05-05 11:09:59 李小兵

Go语言中的 Array, Slice和 Map

介绍 曾经学习python的时候,记得书上说 dict 是 python的 horsepower(动力)。然后,Slice 和 Map 又何尝不是 golang 的 workhorse 呢? Array 是值类型,Slice 和 Map 是引用类型。他们是有很大区别的,尤其是在参数传递的时候。 另外,Slice 和 Map 的变量 仅仅声明是不行的,必须还要分配空间(也就是初始化,initialization) 才可以使用。 第三,Slice 和 Map 这些引用变量 的 内存分配,不需要你操心,因为 golang 是存在 gc 机制的(垃圾回收机制) Array 的用法 数组的声明(这里就是定义,给数据存储分配了空间): var arrayName [arraySize] dataType...阅读全文

博文 2015-03-26 10:00:01 xiaorenwuzyh

GO语言的一些简单数据类型之间相互转换

在GO语言的使用过程中总会遇到一些类型之间相互转换的问题,做了一个简单的总结。只列出了几种易用的类型间的转换,如果用到其他类型间的数据类型格式转换,查看GO文档是很不错的选择。 strconv包实现了基本数据类型和其字符串表示的相互转换。 //string到int value_int,err:=strconv.Atoi(string) //int到string str:=strconv.Itoa(value_int) //string到int64 value_int64, err := strconv.ParseInt(string, 10, 64) //int64到string,需注意下面转换规定 //FormatInt returns the string representation ...阅读全文

博文 2015-06-23 23:02:19 qq_534019165

Golang与JAVA比较

普通用法比较 函数func swap(x, y string) (string, string) { var a int = 100 return y, x}a, b := swap("Mahesh", "Kumar")go的方法需要加func入参类型在参数后面,返回类型在入参后面定义类型在变量的后面返回值可以是多个参数函数定义后可作为值来使用java 中的null go中的nilgo中的数组var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}go &a a的地址var ip *intjava的class就是go的structjava中get,set方法 Book1.title = "Go 语言" fmt.Printf( "Book 1 ...阅读全文

博文 2019-01-19 18:34:43 任嘉平生愿

Golang中new和make的区别

new会分配结构空间,并初始化为清空为零,不进一步初始化 new之后需要一个指针来指向这个结构 make会分配结构空间及其附属空间,并完成其间的指针初始化 make返回这个结构空间,不另外分配一个指针 例子new: var p *[]int = new([]int) 或 p := new([]int) 以上分配了一个slice结构,但是结构中的应该指向底层数组的ptr指针为空,故实际不能往这个slice里面存取数据 同时分配了一个指针p,也即(在32位系统中)占4个字节并存放slice结构的地址 例子make: var v []int = make([]int, 0) v := make([]int, 0) 以上分配了一个slice结构,且结构中的应该指向底层数组的ptr指针已经指向了某个底...阅读全文

博文 2015-10-16 12:00:01 ahlxt123

golang IO COPY

使用golang实现 IO copy,测试程序如下: package main import ( "fmt" "io" "os" "syscall" ) func main() { var errCh chan error errCh = Go(func() error { return test_stdout() }) if err := <-errCh; err != nil { fmt.Printf("End io_copy: %s\n", err) //return err } } //异步执行 func Go(f func() error) chan error { ch := make(chan error, 1) go func() { ch <- f() }() return...阅读全文

博文 2015-10-30 19:00:03 golang_yh

重量级爬虫软件Pholcus

# pholcus [![GoDoc](https://godoc.org/github.com/tsuna/gohbase?status.png)](https://godoc.org/github.com/henrylee2cn/pholcus) [![GitHub release](https://img.shields.io/github/release/henrylee2cn/pholcus.svg)](https://github.com/henrylee2cn/pholcus/releases) Pholcus(幽灵蛛)是一款纯Go语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批...阅读全文

golang枚举类型 - iota用法拾遗

在c#、java等高级语言中,经常会用到枚举类型来表示状态等。在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手。 1、枚举类型定义 从百度百科查询解释如下:http://baike.baidu.com/link?url=Lrq57-YIZJ35grERvdg2kh7lfGfxvvLCVsNBMAqjBUOQX3CJUYnJp-9oZ2-rf3JGMqL3e4RbnSRQWs_5nmaI6K 枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中是一种构造数据类型。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。 枚举可以根据Integer、Long、Short或Byte...阅读全文

golang 接口interface{}、断言、switch type

interface{} 可以接受任何类型的对象值 获取interface{}队形的数据类型,可以使用断言,或者 switch type 来实现 // Assertion project main.go package main import ( "fmt" ) type Bag struct { Key string } type Bag2 struct { Key int } func main() { var b1 interface{} var b2 interface{} b1 = Bag{Key: "1"} b2 = Bag2{Key: 0} //获取interface{}中存放的数据类型 //方法一: { //判断是否是Bag类型 若不是则置0 b, ok := b1.(Bag)...阅读全文

博文 2016-03-03 16:00:01 xia_xing

Golang数据库操作

Golang支持DB操作位于database包下,支持基本CRUD操作、事务和Prepared Statement,本文以MySQL为例。 MySQL驱动安装 使用数据库之前,必须安装相关MySQL数据驱动[1],如果未安装驱动或者没有引入驱动库会报以下错误: failed to open database: sql: unknown driver "mysql" (forgotten import?) 安装golang mysql driver go get github.com/go-sql-driver/mysql 代码中还需注册数据库驱动,通过引入空白倒入[2]mysql包来完成 import("database/sql"// 引入数据库驱动注册及初始化_ "github.com/g...阅读全文

博文 2015-06-17 20:01:42 CoProphet

Go学习笔记之基础数据类型

1 整数 在 Go 语言中,如果不加特殊前缀,都是10进制表示,例如:“100” 整数可以直接用指数形式,例如:“1E9”,意思是 1 * (10^9),1 乘以 10 的 9 次方 整数的加减法用 + 和 - 号,乘法用 * 号,除法用 / 号, 得到的商是整数,例如 5 / 2 = 2,而 % 号是求余(取模), 例如 5 % 2 = 1 在 Go语言中,整数类型分为带符号整型和不带符号整型,接着又分别按照长度各自划分为4个类型。 带符号整型 int8 int16 int32 int64 不带符号整型 uint8 uint16 uint32 uint 64 除此之外还有默认类型 int 和 uint,目前都是32位,未来可能会变成64位 还有2个特殊的整型别名 ,和字符串很相关,分别是:...阅读全文

博文 2014-10-12 21:00:11 hnxxwyq

一人千面:谈谈Go语言中的type

世界是复杂的。一个人、一个事物可以有多样的特性,而多个人多个事物又可以表现出一致的特性;从微观角度说,即具体到个体时,要求这个个体是多功能的多样性的,能够完成越多的功能具有越多的特性越好。比如一个人可以同时具有贤妻、慈母、严师和路人甲的身份,比如一个数字可以表示年龄、高度、分数等。从宏观角度说,从管理复杂性的角度出发,又要求许多的个体具有一致性以便进行统一处理以降低管理成本,比如各种机动车都可以“驾驶”,各种食物都可以“食用”,各种书写工具都可以“写”。换而言之:微观上一人千面;宏观上千人一面。 编程本质上是为了解决人类的问题满足人类的需要,所以需要把现实世界映射到编程语言里,即在编程语言中建立对应的模型。在Go语言里,提供了很好的机制来建立这种模型,也就是type和interface。ty...阅读全文

http.ServeMux解析

## web server概述 使用go语言搭建一个web服务器是很简单的,几行代码就可以搭建一个稳定的高并发的web server。 ``` // hello world, the web server func HelloServer(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n") } func main() { http.HandleFunc("/hello/", HelloServer) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) }...阅读全文

博文 2015-09-29 14:14:51 shanks

Go 在万亿级大数据平台开发中的实战

导语迅猛发展的互联网将我们带入了大数据时代,大数据已经成为发展中不可或缺的力量支撑,大数据挑战和机遇并存,如何更好合理、灵活应用大数据是企业的关注所在。七牛大数据团队研发工程师孙健波为大家带来题为Go 在大数据开发中的实战经验的技术分享。以下是此次演讲内容整理。作者介绍:孙健波,InfoQ 专栏作者,硕士毕业于浙江大学计算机学院,2015 年底加入七牛,参与并负责七牛大数据平台整条链路多模块的架构设计以及开发工作,包括大数据计算引擎、时序数据库服务以及日志检索服务。在此之前主要研究和参与 Cloudfoundry、Kubernetes、Docker 等容器与容器云相关工作,是《Docker 容器与容器云》一书的主要作者之一。大数据图 1如图 1 可以看到,现在大数据的生态相对来说比较成熟了,...阅读全文

博文 2017-08-30 05:45:40 孙健波

golang中timer定时器实现原理

一般我们导入import ("time")包,然后调用time.NewTicker(1 * time.Second) 实现一个定时器: func timer1() { timer1 := time.NewTicker(1 * time.Second) for { select { case <-timer1.C: xxx() //执行我们想要的操作 } } } 再看看timer包中NewTicker的具体实现: func NewTicker(d Duration) *Ticker { if d <= 0 { panic(errors.New("non-positive interval for NewTicker")) } // Give the channel a 1-element ti...阅读全文

博文 2015-07-28 15:00:01 webyh

深入浅出Golang的协程池设计

教程制作: IT无崖子(刘丹冰) 教程简介:本教程主要针对具有一定编程基础的学员,懂得基本的编程语法。 使用Go语言实现并发的协程调度池阉割版,本文主要介绍协程池的基本设计思路,目的为深入浅出快速了解协程池工作原理,与真实的企业协程池还有很大差距,本文仅供学习参考。 一、何为并发,Go又是如何实现并发? gopool1.jpeg gopool2.jpeg 并行的好处: 同一时刻可以处理多个事务 更加节省时间,效率更高 具有并行处理能力的程序我们称之为“并发程序” 并发程序的处理能力优势体现在哪里? goPool3.jpeg 二、Go语言如何实现并发? package main import "fmt" import "time" func go_worker(name string) { f...阅读全文

博文 2018-10-14 14:34:38 IT无崖子

Golang之bytes.buffer学习笔记

bytes.buffer是一个缓冲byte类型的缓冲器存放着都是byte Buffer 是 bytes 包中的一个 type Buffer struct{…} A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use. (是一个变长的 buffer,具有 Read 和Write 方法。 Buffer 的 零值 是一个 空的 buffer,但是可以使用) Buffer 就像一个集装箱容器,可以存东西,取东西(存取数据) 创建 一个 Buffer (其实底层就是一个 []byte, 字节切片)...阅读全文

博文 2016-02-29 23:00:01 luomoshusheng

GOLANG 基本数据类型 浮点型

浮点型 主要为了表示小数 也可细分float32和float64两种 float64提供比float32更高的精度 取值范围 类型 最大值 最小非负数 float32 3.402823466385288598117041834516925440e+38 1.401298464324817070923729583289916131280e-45 float64 1.797693134862315708145274237317043567981e+308 4.940656458412465441765687928682213723651e-324 运算结果不正确解决方式 原代码 package main inport "fmt" func main(){ var a,b,c float64 a=...阅读全文

博文 2016-08-30 16:00:00 zengyz

golang调用dll

//调用方式 func WindowVersion1() { h, err := syscall.LoadLibrary("kernel32.dll") if err != nil { fmt.Printf("Error: %s\n", err) return } defer syscall.FreeLibrary(h) proc, err := syscall.GetProcAddress(h, "GetVersion") if err != nil { fmt.Printf("Error: %s\n", err) return } r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0) major := byte(r) minor :=...阅读全文

博文 2014-10-04 19:27:11 陈好

Go语言中怎样判断数据类型_不懂的木匠_新浪博客

要判断数据类型,可以用Go的空接口: 建一个函数t 设置参数i 的类型为空接口,空接口可以接受任何数据类型 func t(i interface{}) { //函数t有一个参数i switch i.(type) { //多选语句switch case string: //是字符时做的事情 case int: //是整数时做的事情 } return } i.(type)只能在switch中使用 这函数没有返回值,你可以自己加入 ---------------------------------------------------------------------------- 还可以用反射: package main import ( "fmt" "reflect" ) func main(...阅读全文

博文 2015-09-22 03:00:01 ftm-datablogs

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

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

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

golang技术随笔(一)深入理解interface

Go语言的主要设计者之一罗布·派克( Rob Pike)曾经说过,如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口。可见接口在golang中的地位,及其对gloang这门语言所带来的活力。 golang中的interface是什么 接口相当于是一份契约,它规定了一个对象所能提供的一组操作。要理解golang中接口的概念我们最好还是先来看看别的现代语言是如何实现接口的。 C++没有提供interface这样的关键字,它通过纯虚基类实现接口,而java则通过interface关键字声明接口。它们有个共同特征就是一个类要实现该接口必须进行显示的声明,如下是java方式: interface IFoo { void Bar(); } class Foo implements IFoo ...阅读全文

博文 2015-01-26 20:00:02 justaipanda

go channel实现

go channel实现 转载自:http://alpha-blog.wanglianghome.org/2012/04/13/go-channel-implementation/ G语言经过多年的发展,于最近推出了第一个稳定版本。相对于C/C++来说,Go有很多独特之出,比如提供了相当抽象的工具,如channel和goroutine。本文主要介绍channel的实现方式。 简介 channel有四个操作: 创建:c = make(chan int)发送:c <- 1提取:i <- c关闭:close(c) 根据创建方式的不同,channel还可分为有buffer的channel和没有buffer的channel。buffer的大小由make的第二个参数指定,默认为0,即没有buffer。创...阅读全文

博文 2014-10-06 16:37:04 kai_ding

Golang在京东列表页实践总结

目前线上状态 基于搜索实现; 全量数据,搜索结果不理想; 接口响应时间长,影响了用户体验; 没法针对数据做二次优化; 转化率相对较低; 基于以上原因,需要做出改变,所以就需要对老进行重构,如下 重构版本 非全量数据,线下异步根据数据模型进行进行筛选部分最优数据; 要求时时过滤计算,接口相应时间要快,保证用户体验; 数据进行优化,提高转换率,提搞GMV; 为何选择golang golang语言强大的并发能力; 与C相媲美的性能,新版对cpu计算要求较高; 基于以上两点,所以选择了golang语言作为服务端计算使用的语言。 重构后的架构图 解释下架构图各个模块功能 Nginx+Lua: 用来渲染页面,拿到go计算服务的json数据渲染到页面端,最终呈现给终端用户; Config Center 是...阅读全文

Go程序GC优化经验分享

作者:达达 来源:http://1234n.com/?post/yzsrwa 最近一段时间对《仙侠道》的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验。 游戏第一次上线的时候,大部分精力都投入在做cpuprof和memprof找性能瓶颈和内存泄漏上,没有关注过Go的GC运行情况。 有一次cpuprof里的scanblock调用所占的比例让我注意到Go的GC所带来的性能消耗,记得那份cpuprof里,scanblock调用占到49%。也就是说有一半的CPU时间浪费在了GC上。 于是我开始研究如何进行优化,过程中免不了要分析数据,经过一番搜索,我好到了GOGCTRACE这个环境变量。 用法类似这样: GOGCTRACE=1 ./my_go_program 2> log_file ...阅读全文

博文 2014-10-29 01:00:00 LvanNeo

Go 语言使用 TCP keepalive

自:http://studygolang.com/articles/951 Go 语言使用 TCP keepalive 如果你写过某些 TCP socket 代码,你可能会疑问:如果网线被拨掉或者远程主机崩溃了我的TCP连接会怎样? 简短的答案是:一点影响都没有。这种情况下连接的结束远程主机是不会发送FIN数据包的,并且本地系统不能检测连接是否已中断。所以需要作为程序员的你来解决这种情况。 --zxp 翻译于 1 个月 前 0人顶 顶 翻译的不错哦! GO语言为你提供了解决这个问题的几种方法。首选的方法可能是 net.Conn 接口中的SetReadDeadline方法。假设你的连接在以一种特定的间隔来接收数据,你可以简单地把读取超时当作一个io.EOF错误并Close这个连接。很多现有的T...阅读全文

博文 2015-01-29 17:00:01 leonzhouwei

golang 实现tcp转发代理

package main import ( "flag" "fmt" "io" "net" "os" "strings" "sync" ) var lock sync.Mutex var trueList []string var ip string var list string func main() { flag.StringVar(&ip, "l", ":9897", "-l=0.0.0.0:9897 指定服务监听的端口") flag.StringVar(&list, "d", "127.0.0.1:1789,127.0.0.1:1788", "-d=127.0.0.1:1789,127.0.0.1:1788 指定后端的IP和端口,多个用','隔开") flag.Parse() tr...阅读全文

博文 2016-06-08 20:00:00 fyxichen

Go中map的创建和初始化

// code_014_map_usage project main.go package main import ( "fmt" ) func main() { /*Go语言中的map(映射,字典)是一种内置的数据结构,它是一个无序的key-value对的集合。 1)键的约束: 在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型 2)切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键 err, invalid map key type []string 3)map值: 可以是任意类型,没有限制。 4)键值的数据类型: map里所有键的数据类型必须是相同的,值也必须如何,但键和值的数据类型可以不相同。 5)注意:map是无序的,我们无法决定它的返回...阅读全文

博文 2018-10-05 01:35:15 ck_god

golang的跨域

在使用golang做web的应用程序的时候,最容易碰到跨域问题了,跨域就是www.a.com访问www.b.com的文件。但是在浏览器里,为了安全起见,这样做是不允许的,这就是js的同源策略了。不懂的话google一下。1.golang做web的应用程序,不用使用像apache的web服务器,因为它自己可以构造一个web服务器。这样问题就来了,因为你使用js做前台,golang做后台,这样js传值的时候,是可以传到服务器的,并且是可以进行跨域访问的,因为golang构造的服务器与你前台就造成了跨域问题了。而ajax传值是传到服务器端的,并且可以进行跨域访问,所以我在开发的时候果断使用了它。 2而在golang接受传值之后,要返回信息给前台,这是golang里面就要设置可以进行跨域访了。设置就...阅读全文

博文 2015-10-22 19:00:02 helloworld20102010

go.js简介及实例演示

GoJS是一个JavaScript库,让你轻松创建现代Web浏览器的交互图。 GoJS支持图形化的模板和图形对象属性数据模型的数据绑定。你只需要保存和恢复模型,包括持有任何性质的应用需求,简单的JavaScript对象。许多预定义的工具和命令执行,大部分的图表所需要的标准的行为。外观和行为的定制是大多设置属性的问题。 下载地址:http://gojs.net/latest/doc/download.html 使用gojs开发的流程图及拓扑图实例:http://gojs.net/latest/samples/index.html goJS去水印版:http://download.csdn.net/detail/qq_14966339/9569675 goJS实例演示: function ini...阅读全文

博文 2017-03-10 07:00:49 孟飞阳

Go语言for```range方法遍历map,遍历打印值与map实际存储值不同

> 今天编写了map结构数据存储程序,map的key总数:22046个,通过for```range方法遍历map发现,遍历打印的结果与实际存储内容不符,主要是存储结果数量和值正确,打印出来的值少了。 - 以下是打印结果 ```go keys:0xE7A0 values:0x942E keys:0xE9E6 values:0x6B92 keys:0xF5F2 values:0x8E9C keys:0xF7F0 values:0x9EDF ======================= 以上使用range遍历结果 ==================== 获取0xFE4E值:0xFA28 总数:22046 ``` - 以下是存储数据结构示意 ...阅读全文

服务监控系统 Prometheus

Prometheus 是一个开源的服务监控系统和时间序列数据库。 ![image](http://static.oschina.net/uploads/space/2015/0205/082749_47Dp_5189.png) 特性: * 高维度数据模型 * 自定义查询语言 * 可视化数据展示 * 高效的存储策略 * 易于运维 * 提供各种客户端开发库 * 警告和报警 * 数据导...阅读全文

Go语言学习八:切片(slice)和范围(range)

// Go 语言切片是对数组的抽象。切片的单词来源于可以对其他数组和切片进行片段截取 // Go 数组的长度不可改变,在特定场景中这样的集合就不太适用, // Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"), // 与数组相比切片的长度是不固定的,可以追加元素, // 在追加时可能使切片的容量增大。 package main import "fmt" func main() { // 切片的长度和容量 var numbers = make([]int, 3, 5) //用make创建切片 printSlice(numbers) // 空(nil)切片 // 切片在未初始化时默认是nil,长度是0,容量也是0 var numbers1 []int printSlice(numbe...阅读全文

博文 2016-03-31 11:00:08 shawncheer

golang源码解读之map

golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。 详细的实现后续补充,这里先做个备忘。 在iterate整个map的时候,使用delete是安全的。这跟c++是不一样的,c++在delete的时候,会导致整棵树发生变化,所以不能在迭代的时候删除元素。 那为什么golang的map是安全的呢,从源码来看,golang的map使用了桶的概念,元素是被hash到桶存储,每个桶预设是存储八个kv,而且在头部有一个uint8 tophash[8]的结构,存储每个key的高八位(即hash(key) » (64 - 8)),如果该位置未被放置元素,则有一个特殊的标志Empty。在插入删除的时候,首先会比较该uint8跟hash(key)是否相等。当然,桶还利...阅读全文

博文 2014-10-04 19:26:15 weijiaen

Golang redigo hmset hset 问题

最近公司项目,换到了golang 下面来开发,遇到了redis存储链表的问题,困扰了我好几天,后面静下心来,好好读了一下源码,发现官方的例子,最终还是羊毛出在羊身上 c, err := dial() if err != nil { panic(err) } defer c.Close() var p1, p2 struct { Title string `redis:"title"` Author string `redis:"author"` Body string `redis:"body"` } p1.Title = "Example" p1.Author = "Gary" p1.Body = "Hello" if _, err := c.Do("HMSET", redis.Args{...阅读全文

博文 2015-05-13 03:00:05 jackluo

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 -- 10件你不知道的事情

本文翻译 从 文章进行翻译,在此表示感谢 10 things you (probably) don’t know about golang 匿名结构体 (Anonymous structs) Template data (模板数据) data := struct { Title string Users []*User //猜测 User 是一个接口,接口指针的切片 } { title, USERS, } err := tmpl.Execute(w, data) (Cheaper and safer than using map[string]interface{}) 确实没有太理解,是什么意思? 嵌入式锁 (Embedded Lock) var hits struct{ sync.Mute...阅读全文

博文 2015-03-29 20:00:09 xiaorenwuzyh

golang mongodb mgo 插入,查询例子

golang mongodb mgo 插入,查询的一个小例子,golang还是给我那个感觉,比nodejs写起来舒服. package main import ( "fmt" "launchpad.net/mgo" "launchpad.net/mgo/bson" ) type Mail struct { Id bson.ObjectId "_id" Name string Email string } func main() { // 连接数据库 session, err := mgo.Dial("127.0.0.1") if err != nil { panic(err) } defer session.Close() // 获取数据库,获取集合 c := session.DB("tes...阅读全文

博文 2014-10-05 00:00:01 DarkWingBoy

golang map to struct

map映射到结构体,这里只支持简单的数据类型,复杂的需要在拓展 package main import ( "errors" "fmt" "reflect" "strconv" "time" ) type User struct { Name string Age int8 Date time.Time } func main() { data := make(map[string]interface{}) data["Name"] = "张三" data["Age"] = 26 data["Date"] = "2015-09-29 00:00:00" result := &User{} err := FillStruct(data, result) fmt.Println(err, fmt...阅读全文

博文 2015-09-29 16:00:03 别人说我名字很长

《Golang 入门系列三》golang的运算符

前言:运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 一、算数运算符 下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。 运算符 描述 实例 + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * B 输出结果 200 / 相除 B / A 输出结果 2 % 求余 B % A 输出结果 0 ++ 自增 A++ 输出结果 11 -- 自减 A-- 输出结果 9 二、关系运算符 下表列出了所有Go语言的关系运算符。假定 A 值为 10,B 值为 20。 运算符 描述 实例 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B...阅读全文

博文 2018-02-28 01:33:07 IT--小哥