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

go的json输出

// code_030_JSON_key_value project main.go package main import ( "encoding/json" "fmt" ) //Go语言内建对JSON的支持。 //使用Go语言内置的encoding/json 标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据 type IT struct { Company string Subjects []string IsOk bool Price float64 } type University struct { //ID int //所学专业的ID Name string `json:"-"` //大学名称 //Department string //系 //Major stri...阅读全文

博文 2018-10-07 00:35:10 ck_god

更优雅的 Golang 错误处理

Golang 中的错误处理是一个被大家经常拿出来讨论的话题(另外一个是泛型)。其中泛型这个问题,rsc 在最近的计划中也提出了纳入他今年的考虑计划中,同时,泛型的提案在2016年也进行了一些更新,相信未来会有一些更好的方案提出。这个文章我们讨论一下如何在现行的 Golang 框架下提供更友好和优雅的错误处理。 从现状谈起 Golang 中的错误处理原则,开发者曾经之前专门发布了几篇文章( Error handling and Go 和 Defer, Panic, and Recover、Errors are values )介绍。分别介绍了 Golang 中处理一般预知到的错误与遇到崩溃时的错误处理机制。 一般情况下,我们还是以官方博客中的错误处理例子为例: func main() { f,...阅读全文

博文 2017-02-10 07:42:04 kevin

Golang语言标准库http/url的Values的详细介绍

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库http/url Values 今天我们更新文章,主要推广的还是GO语言,当然现在热门搜索的还是Golang,今天我们主要讲解的就是Golang标准库里边的net/url的下边的这些 [php] type Values func ParseQuery(query string) (m Values, err error) func (v Values) Add(key, value string) func (v Values) Del(key string) func (v Values) Encode() string func (v Values) Get(key st...阅读全文

博文 2017-02-09 18:38:04 widuu

golang sort 包使用,及三个简单排序算法冒泡,插入,选择 练习

sort 包的核心类型是 sort.Interface: type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with indexes i and j. Swap(i, j int) } 接口 是golang 的很cool 的特性,rob pike 说接口有点类似uinx pipe,把...阅读全文

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

golang reflect

golang reflect go语言中reflect反射机制。详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect" ) func main() { var x int = 1 fmt.Println("type: ", reflect.TypeOf(x)) } type: int TypeOf函数的定义如下,参数为接口类型,返回值为类型 func TypeOf(i interface {}) Type ValueOf函数的定义如下,参数为接口类型,返回值为Value var x int = 1 fmt.Println("value: ", reflect.ValueOf(x)) value: 可以通过Kind函...阅读全文

使用Go语言工作400天后的感受

我在2011年就听说了Go并学习了一段时间,坦白的说,那时候对Go是比较无感的,因为并没有看到Go特别亮眼的地方,可能和我使用C、Erlang、Java有关,这三种语言可以写高性能、高并发、高可用的服务;包含了面相过程、面向并发、面向对象的思想,我觉得我并不需要再学习Go,何况那个时候好像也没宣传的那么优秀。 一切都发生在418天前,因为工作的需要,我开始写Go了,本来预期是一段压抑、蛋疼的旅程(被迫使用其它语言的同学可能都会有此感受),结果收获了非一般的惊喜、非一般的效率、非一般的开发体验。 先用几个词来总结一下我的感受:简洁、标准、组合、创造力、生产力! 特别是生产力,由于Go优秀的标准库、完美的代码安全、全面的三方库、完善的测试机制、完善的标准管理工具,使用Go给我们小组带来了极大的生...阅读全文

博文 2016-03-28 15:54:45 erlib

阅读 valyala/fasthttp —— 比官方库更快的 HTTP 包

valyala/fasthttp 是号称比官方net/http库更快的 http server 库。就去顺便研究了,发现一些细节的不同。 处理 net.Conn 的 goroutine 处理net.Conn的goroutine的使用方式,和标准库有很大差别。在标准库,net.Listener.Accept() 到一个连接,就会开启一个goroutine: // Serve accepts incoming connections on the Listener l, creating a // new service goroutine for each. The service goroutines read requests and // then call srv.Handler to...阅读全文

博文 2016-04-17 14:49:15 傅小黑

Go1.5 改进摘要

Go1.5 改进简介 纯Go(+少量汇编)实现 runtime 和 编译器 改进 垃圾回收器, 支持 并发 (有个指标好像是 停顿在 10 毫秒以内). GOMAXPROCS 默认值改为 CPU 核数 internal 限制规则推广到第三方包 (之前只有 std 包启用) 增加 vendor 支持, 基本解决 第三方库的依赖问题和版本问题 增加 trace 命令, 更友好的剖析程序运行状态 增加 go doc 命令 语法变化 增加 map 字面量. 以前的代码: m := map[Point]string{ Point{29.935523, 52.891566}: "Persepolis", Point{-25.352594, 131.034361}: "Uluru", Point{37.4...阅读全文

博文 2015-07-08 16:00:00 chai2010

深入理解 Go 标准库之 bufio.Scanner

众所周知,[带缓冲的 IO 标准库](https://golang.org/pkg/bufio/) 一直是 Go 中优化读写操作的利器。对于写操作来说,在被发送到 `socket` 或硬盘之前,`IO 缓冲区` 提供了一个临时存储区来存放数据,缓冲区存储的数据达到一定容量后才会被"释放"出来进行下一步存储,这种方式大大减少了写操作或是最终的系统调用被触发的次数,这无疑会在频繁使用系统资源的时候节省下巨大的系统开销。而对于读操作来说,`缓冲 IO` 意味着每次操作能够读取更多的数据,既减少了系统调用的次数,又通过以块为单位读取硬盘数据来更高效地使用底层硬件。本文会更加侧重于讲解 [bufio](https://golang.org/pkg/bufio/) 包中的 [Scanner](https...阅读全文

博文 2017-12-10 02:49:26 polaris

Golang程序配置方案小结

Golang程序配置方案小结 七 01 bigwhite技术志 Bool, cobra, config, Cpp, Education, flag, getopt, Go, Golang, ini, Java, json, multiconfig, Perl, POSIX, Ruby, Shell, TOML, twitter, viper, Windows, 命令行选项, 标准库, 配置文件 No Comments 在Twitter上看到一篇关于Golang程序配置方案总结的系列文章(一个mini series,共6篇),原文链接:在这里。我觉得不错,这里粗略整理(非全文翻译)一下,供大家参考。 一、背景 无论使用任何编程语言开发应用,都离不开配置数据。配置数据提供的形式有多样,不外乎命令...阅读全文

用Golang写爬虫(一)

之前一直都是再用Python写爬虫,最近想体验下Golang写爬虫的感觉,所以就有了这个系列。我想要抓取的页面是豆瓣Top250页面,选择它的理由有3个: 豆瓣页面代码相对规范 豆瓣对爬虫爱好者相对更宽容 Top250页面简洁,很适合拿来练手 我们先看第一版的代码。 按逻辑我把抓取代码分成2个部分: HTTP请求 解析页面中的内容 我们先看HTTP请求,Golang语言的HTTP请求库不需要使用第三方的库,标准库就内置了足够好的支持: import ( "fmt" "net/http" "io/ioutil" ) func fetch (url string) string { fmt.Println("Fetch Url", url) client := &http.Client{} re...阅读全文

博文 2019-07-10 11:34:21 Golang编程

Go语言:UUID 的生成与解析

导言:因为Golang中的UUID还没有纳入标准库,所以我们使用GitHub上的开源库,另外我所提供的这个开源库支持 UUID v5,代码实例我就用比较常用的 UUID v4 演示了 1. 安装 go get github.com/satori/go.uuid 2. 实例 package main import ( "github.com/satori/go.uuid" ) func main() { // 创建 UUID v4 u1 := uuid.Must(uuid.NewV4()) println(`生成的UUID v4:`) println(u1.String()) // 创建可以进行错误处理的 UUID v4 u2, err1 := uuid.NewV4() if err1 != ...阅读全文

博文 2019-03-14 18:34:47 海东总司

Go语言内幕(1):主要概念与项目结构

本文由 伯乐在线 - yhx 翻译,唐尤华 校稿。未经许可,禁止转载!英文出处:Sergey Matyukevich。欢迎加入翻译组。这个系列博客主要为那些对 Go 基本知识已经有一定了解,又希望对其内部细节进行更深一步地探索的人准备的。今天这一篇主要分析 Go 源代码的基本结构以及 Go 编译器的某些内部细节。读完这篇博客后,你会得到下面三个问题的答案: 1. Go 源代码结构是什么样子的? 2. Go 编译器是如何工作的? 3. Go 语言中的结点树的基本结构是什么样的? 让我们开始吧 每当开始学习一门新编程语言的时候,你总是可以找到大量的 “hello world” 教程、新手指南或者关于语言的主要概念、语法甚至标准库的文档。然而,当你想找一些介绍得更加深入的资料,比如语言运行时分配的...阅读全文

博文 2016-05-31 19:49:01 伯乐在线

Golang中的类型和类型断言

#### golang中的类型 golang中的有两种类型,**静态类型(static type)**和**动态类型(dynamic type)** **静态类型**:静态类型是在声明变量的时候指定的类型,一个变量的静态类型是永恒不变的,所以才被称为静态类型,也可以简称为类型,普通变量只有静态类型。 ``` package main import "fmt" func main() { // 变量i和变量g只有静态类型,变量i的类型为int,i的类型为main.Goose, var i int var g Goose fmt.Printf("%T\n", i) fmt.Printf("%T\n", g) } type Goose struct { age int name string } ...阅读全文

博文 2019-04-26 17:14:08 LeeYubo

理解 Go 标准库中的 atomic.Value 类型

作者:喵叔 原文:blog.betacat.io/post/golang… 在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地"存储(Store)和加载(Load)任意类型的值。 历史起源 我在golang-dev邮件列表中翻到了14年的这段讨论,有用户报告了encoding/gob包在多核机器上(80-core)上的性能问题,认为encoding/gob之所以不能完全利用到多核的特性是因为它里面使用了大量的互斥锁(mutex),如果把这些互斥锁换成...阅读全文

博文 2019-08-31 23:04:23 awk

完全静态编译一个Go程序

在Docker化的今天, 我们经常需要静态编译一个Go程序,以便方便放在Docker容器中。 即使你没有引用其它的第三方包,只是在程序中使用了标准库net,你也会发现你编译后的程序依赖glic,这时候你需要glibc-static库,并且静态连接。 不同的Go版本下静态编译方式还有点不同,在go 1.10下, 下面的方式会尽可能做到静态编译: 1CGO_ENABLED=0 go build -a -ldflags '-extldflags "-static"' . 有一个提案请求给编译加一个static,如果接收了的话也许在将来的go中直接使用static。 参考文档 http://blog.wrouesnel.com/articles/Totally%20static%20Go%20bui...阅读全文

博文 2018-09-01 17:21:06 smallnest

goLang 类型断言 type assertion

goLang有类型转换/类型断言/类型切换 1.类型断言 类型断言就是将接口类型的值(x),装换成类型(T)。格式为: x.(T) v:=x.(T) v,ok:=x.(T) 类型断言的必要条件就是x是接口类型,非接口类型的x不能做类型断言: var i int=10 v:=i.(int) //错误 i不是接口类型 T可以是非接口类型,如果想断言合法,则T应该实现x的接口 T也可以是接口,则x的动态类型也应该实现接口T var x interface{}=7 //x的动态类型为int,值为7 i:=x.(int) // i的类型为int ,值为7 type I interface {m()} var y I s:=y.(string) //非法: string 没有实现接口 I (missin...阅读全文

博文 2018-02-05 15:34:42 soledad

搞定淘宝,京东 api调用返回的奇葩json格式

淘宝,京东的api调用返回的json格式跟golang的标准库encoding/json中的格式不兼容。 淘宝有些地方习惯性的把float数据加""变成字符串格式 比如 "delivery_score": "0.0", 文档上的又不一样 "delivery_score": 90, 京东的习惯是,不管是不是字符串类型都都加"",变成字符串类型的。 这样就造成标准库无法识别这些格式, 我把json拷贝出来,在decode.go文件的661行的literalStore函数种修改了:字符串处理方式代码如下: case '"': // string s, ok := unquoteBytes(item) if !ok { if fromQuoted { ...阅读全文

golang excel

github.com/tealeg/xlsx 封装的接口简单易用 package main import ( "bufio" "fmt" "github.com/tealeg/xlsx" "os" "strings" ) func main() { if len(os.Args) != 3 { fmt.Printf("Usage : %s inFile outFile\n", os.Args[0]) return } inFileName := os.Args[1] outFileName := os.Args[2] inFh, err := os.OpenFile(inFileName, os.O_RDONLY, 0755) if err != nil { fmt.Printf("open...阅读全文

博文 2015-04-04 03:00:00 rojas

GO 语言接口与结构体 - interface & struct

interface & struct 接口与结构体 以继承为特点的 OOP 只是编程世界的一种抽象方式,在 Golang 的世界里没有继承,只有组合和接口,并且是松散的接口结构,不强制声明实现接口,这看起来更符合 Java 之父 Gosling 的设想。 If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. 翻译过来就是:如果某个东西长得像鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那它就可以被看成是一只鸭子。 单一继承关系解决了 is-a 也就是定义问题,因此可以把子类当做父类来对待。但对于父类不同但又具有某些共同行为的数据,单一继承就不能解决了,C++ 采...阅读全文

博文 2019-08-02 22:32:40 坚果jimbowhy

哪种编程语言好?大神为你分析 Go、Java、C、C++ 等主流编程语言

文/赵玉锡 2004 年进入华为,一直在消息产品开发一线耕耘,今年下半年转入华为融合视频业务。曾参与多个重要项目与重要版本的设计、重构与开发,辗转多个语言:长期从事 C、C++ 开发,Java 与 Python 也有约 30K+ 代码的开发经验,目前正在基于 Go 语言开发,对 HTML/JS/Shell 等脚本语言也有一定掌握。 本文主要分析 C、C++98、C++11、Java 与 Go,主要论述语言的关键能力。在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以客观公正的角度来论述下各个语言的特点和不足,对语言选型作为一个客观的参考。 把这些写出来,期望得到大家的指正与反馈,让整个分析更客观,性能方面,着重对 Go 做深入剖...阅读全文

博文 2016-11-23 19:00:07 huawei_eSDK

Go 1.5 计划启动,使用 Go 来编译 Go

Go 项目组发布了 Go 1.5 的计划,Go 1.5 将使用 Go 1.4 进行构建,Go 源码树将完全消除所有 C 的代码。移除 C 编译器 (5c,6c,8c,9c)。剩下的 C 程序将转成 Go 语言,包括 [Go compilers](http://golang.org/s/go13compiler), [汇编器和连接器](http://golang.org/s/go13linker) 以及 cmd/dist. 如果这些程序都采用 Go 编写,这会引发一个在完整构建源码的启动问题 —— 你需要一个可用的 Go 工具链来构建 Go 工具链。 为了构建 Go 1.x (x ≥ 5),需要先安装 Go 1.4 到 $GOROOT_BOOTSTRAP. 默认的 $GOROOT_BOO...阅读全文

关于《我为什么放弃Go语言》的讨论

CSDN 上有一篇文章 [《我为什么放弃Go语言》](http://blog.csdn.net/liigo/article/details/23699459),在 golang-china 讨论组引发了一些讨论,为了便于墙内 gopher 们阅读,选择了一些有价值的评论发在这里。(重点关注 minux 大神的回复) 刘鑫: 无所谓啦,本来就是个工具语言,没必要人人都去拜。对自己好用,就用实际行动来支持,这不比打嘴炮好多了。从来没有一门编程语言能让所有人都满意。何况人家文章里有些东西写的还是挺有道理。特别是社区的态度问题。去年我说某IDE的插件不能识别不可达的逻辑,一大群人出来教育我说go语言本来就这么设计的。只有巢鹏一个人的博客上写着这是go官方2009年就明明白白列出来的一个...阅读全文

golang标准库中的encoding/hex包

1、golang中hex包是什么? 2、hex包给开发者提供了什么内容?以及怎么使用? 3、相关链接 一、golang中hex包是什么? hex包实现了16进制字符表示的编解码。 二、hex包给开发者提供了什么内容?以及怎么使用? 变量 var ErrLength = errors.new("encoding/hex: odd length hex string") 解码一个长度为奇数的切片时,将返回此错误 type InvalidByteError byte 描述一个hex编码字符串中的非法字符。 func (e InvalidByteError) Error() string 函数 1)func DecodeLen(x int) int 长度x的编码数据解码后的明文数据的长度 2)fun...阅读全文

Go1.8正式发布

今天Go团队很高兴地宣布Go 1.8发布了。你可以从下载页面获得1.8版本。在这个版本中,整个标准库有显着的性能改进和变化。Go 1.7中为64位x86系统引入的编译器后端现在用于所有体系结构,在这些体系结构下可以看到显着的性能改进。例如,我们的基准程序所需的CPU时间在32位ARM系统上减少了20-30%。在此版本中,对于64位x86系统也有一些性能提升。编译器和链接器跑得更快。编译时间应该比Go 1.7缩短约15%。在这一领域还有更多的工作要做:希望未来版本的编译速度更快。垃圾收集暂停应明显更短,通常在100微秒以下,通常低至10微秒。HTTP服务器添加对HTTP/2 Push的支持,允许服务器向客户端推送。这对于消除网络延迟非常有用。 HTTP服务器还添加了对优雅停机的支持,允许服务器...阅读全文

博文 2017-02-17 01:11:39 方圆

golang 标准库 container/ring 及 container/heap

由于目前golang 没有提供泛型机制,所以通用容器实现基本和 c 类似,golang 用 interface{} 做转接, c 用 void * 转接。 ring 包实现循环双向链表: type Ring struct { next, prev *Ring Value interface{} } 内部导出一个用户可以操作的Value 字段。 heap 包实现 binary heap : type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } heap.I...阅读全文

博文 2015-03-18 14:00:01 yujian0231

Golang标准库深入 - 堆(container/heap)

概述 heap包提供了对任意类型(实现了heap.Interface接口)的堆操作。(最小)堆是具有“每个节点都是以其为根的子树中最小值”属性的树。 树的最小元素为其根元素,索引0的位置。 heap是常用的实现优先队列的方法。要创建一个优先队列,实现一个具有使用(负的)优先级作为比较的依据的Less方法的Heap接口,如此一来可用Push添加项目而用Pop取出队列最高优先级的项目。 这是文档中的解释。 (container/heap 容器数据结构heap heap的实现使用到了小根堆,下面先对堆做个简单说明 1. 堆概念 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。 最大堆和最小堆是二叉堆的两种形式。 最大堆:根结点的键值是所有堆结点...阅读全文

博文 2018-05-15 15:33:06 90design

使用golang进行证书签发和双向认证

前言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。证书签发涉及到了非对称加密方面的知识,这里介绍使用golang中的x509标准库进行证书自签发,还有证书签发后如何使用golang进行双向认证. 自签发证书 生成根证书 根证书是CA认证中心给自己颁发的证书,是信任链的起始点.这里我们自己做CA使用openssl命令来生成根证书. 首先生成私钥 openssl genrsa -out key.pem 2048 然后根据私钥提取公钥 openssl rsa -in key.pem -pubout -out key.pub 开始生成X509格式的自签名证书,会要求输入区别名DN的各项信息(国家,城市,组织,姓名,email等. penssl req -x509 ...阅读全文

博文 2017-06-05 15:06:14 pinecone

golang 字典map

当在哈希表中查找某个与键值对应的元素值时,我们需要先把键值作为参数传给这个哈希表。哈希表会先用哈希函数(hash function)把键值转换为哈希值。  哈希值通常是一个无符号的整数。一个哈希表会持有一定数量的桶(bucket),也可称之为哈希桶,这些哈希桶会均匀地储存其所属哈希表收纳的那些键-元素对。  因此,哈希表会先用这个键的哈希值的低几位去定位到一个哈希桶,然后再去这个哈希桶中,查找这个键。由于键-元素对总是被捆绑在一起存储的,所以一旦找到了键,就一定能找到对应的元素。  随后,哈希表就会把对应的元素值作为结果返回。只要这个键-元素对存在于哈希表中就一定会被查找到,因为哈希表增、改、删键-元素对时候的映射过程,跟上面描述的一样。  也就是说,字典map不会独立存储任何键的值,但会独...阅读全文

博文 2018-09-27 23:34:42 one_zheng

Go语言发展状况和前景

在2015年10月16日,技术大牛许式伟做了有关Go语言发展状况的演讲。 “ 1 大纲 . Go语言语法及标准库变化 . Go语言未来发展的判断 . Go语言开源项目 1.1Go语言语法及标准库变化 1.1.1 Go1.1 • 语言变化 – 支持方法值(Method values) •p.Write 等价于: func(b []byte) (int, error) { return p.Write(b) } •区别于方法表达式(Method expressions): (*Foo).Write,结果类型为 func(p *Foo, b []byte) (int, error) – int,uint 类型长度调整 •自 Go1.1 后,int,uint 的尺寸统一是 64bits,即使是在 3...阅读全文

博文 2016-08-04 20:00:06 abcijkxyz

最近在写一本书——《Golang标准库》

之前写过一序列Golang标准库学习的博文,感觉掌握标准库的用法还是挺重要的,于是,最近开始着手写一本书《Golang标准库》,可以直接在线看:https://github.com/polaris1119/The-Golang-Standard-Library-by-Example。目前已经完成了第一章的两个小节。 之前没有写过书,写的不好的地方望gopher们多多提意见...阅读全文

golang学习的点点滴滴:接口复制和接口查询

package main import "fmt" type IFile interface { Read() Write() } type IReader interface { Read() } type File struct { } func (f *File) Read() { } func (f *File) Write() { } func main() { f := new(File) var f1 IFile = f // ok 因为FIle实现了IFile中的所有方法 var f2 IReader = f1 // ok 因为IFile中包含IReader中所有方法 // var f3 IFile = f2 // error 因为IReader并不能满足IFile(少一个方...阅读全文

博文 2014-10-04 19:27:40 亓斌哥哥

Go 语言坑爹的 WithCancel

Go 语言坑爹的 WithCancel 2018-05-05 Go 语言的 context 包里面有个 Context 接口。 type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{} } 同时还提供了一个 WithCancel 方法: func WithCancel(parent Context) (ctx Context, cancel CancelFunc) WithCancel 接受一个 Context 并返回一个 Context,返回的 ctx 里面的 Done() 函数...阅读全文

博文 2018-11-18 17:56:33 zenlife

不得不知道的golang知识点之nil

golang中的`nil`,很多人都误以为与Java、PHP等编程语言中的null一样。但是实际上Golang的niu复杂得多了,如果不信,那我们继续往下阅读。 `nil` 为预声明的标示符,定义在`builtin/builtin.go`, ``` // nil is a predeclared identifier representing the zero value for a // pointer, channel, func, interface, map, or slice type. // Type must be a pointer, channel, func, interface, map, or slice type var nil Type // Type is he...阅读全文

博文 2017-10-30 09:39:45 qiangmzsx

Go的类型断言解析

经常地我们对一个接口值的动态类型是不确定的,如方法的形参为接口类型时,此时就需要检验它是否符合我们需要的类型。类型断言是一个使用在接口值上的操作。 如果对Golang的接口和接口值的概念不熟悉,看这里:Go的接口总结断言类型的语法:x.(T),这里x表示一个接口的类型,T表示一个类型(也可为接口类型)。一个类型断言检查一个接口对象x的动态类型是否和断言的类型T匹配。 类型断言分两种情况:第一种,如果断言的类型T是一个具体类型,类型断言x.(T)就检查x的动态类型是否和T的类型相同。 如果这个检查成功了,类型断言的结果是一个类型为T的对象,该对象的值为接口变量x的动态值。换句话说,具体类型的类型断言从它的操作对象中获得具体的值。 如果检查失败,接下来这个操作会抛出panic,除非用两个变量来接...阅读全文

博文 2017-10-20 08:06:27 susufufu

我为什么选择使用Go语言?

谢孟军:EGO会员、GopherChina组织者、《Go Web编程》一书的作者,专注Golang技术架构。本文来自EGO会员群分享,入群方式见文末 在这里我主要想和大家分享一些Go和我个人的成长史。首先聊聊Go,在2009年全部开源出来后,它获得了当年的年度语言,但是直到2011年它才发布正式的稳定版本。Go稳定版发布时,Go Team承诺后续的版本都会兼容之前的版本。这对于我们开发者来说简直太重要了,Go后续的版本也一直在提升内功,从而可以让我们无缝的升级Go版本。 Go的核心贡献者 Go主要有静态语言、天生并发、内置GC、安全性高、语法简单、交叉编译和编译快速这几个方面的特性。这些特性决定了Go的三个高富帅特性:运行快、开发快和部署快,而这些特性都是针对Google遇到的一些痛点来设计...阅读全文

博文 2016-11-23 14:00:00 csdn265

浅析GO语言中如何优雅地中断定时任务

问题描述 现在我们创建了一个定时器,能定时的去做某件事,并且在执行时间超时的时候,能把这个定时器关掉。例如需要收集一周的日志,创建一个定时任务去收集日志,每5秒钟执行一次,一周的时间过后需要停掉这个定时任务。 标准库Ticker 标准库提供里的Ticker类,主要功能是定时重复的去做某件事情,如果没有设定超时,它会一直执行下去。常见的写法如下: t := time.NewTicker(3 * time.Second) timeout := time.After(10 * time.Second) go func() { for { <-t.C ... } }() <-timeout ... 注意到这个Ticker对象是无法关闭的,好的,你可能会发现Ticker类提供了Stop方法。但是我们看...阅读全文

DLang vs GoLang

这次我打算好好写, 因为最近有点闲. 首先介绍两种语言: DLang 如果你不介意阅读英文, 那么DLang的官网有一份非常好的介绍, 简单概括下就是 C太古老了, 缺乏很多新的特性.C/C++太复杂了, 但是语言标准就有数百页之多.C++中有很多常用的, 好的特性是通过标准库实现的, 而非编译器, 这样无法做到最好的优化.D希望简化开发, 降低复杂度, 但同时保留大多数好的特性.作者希望这能成为C/C++的代替品. 对我来说, DLang意味着: 垃圾回收. DLang采用了多线程GC(有时间我会写写这个), 回收精度很高, 性能损耗却非常小.C Style Syntax. C和D之间类似的代码具有类似的功能.DMD + LDC. DMD是官方的后端, 而LDC则是基于LLVM的后端, 前...阅读全文

golang Hook

简介 这篇文章主要是通过官方提供的 HTTP 追踪来学习使用 Hook 的编程思想。 在了解使用 Go 语言编写 Hook 之前,最好先掌握 Context 的用法, go 1.7 中 context 已经进入标准库 context,直接 import "context" 就可以使用。 在标准库 context.go 中, Context 定义为一个 interface{} 接口类型。 // A Context carries a deadline, a cancelation signal, and other values across // API boundaries. // // Context's methods may be called by multiple gorouti...阅读全文

博文 2017-09-22 13:05:12 juniway

读 《我为什么放弃Go语言》 有感

最近又熟悉了下go语言,发现go语言还有许多设计不好的地方,然后又读到了《我为什么放弃Go语言》这篇文章, 对于某些方面,我还是比较认同的。 这篇文章总结了十六点,如下: 1.1 不允许左花括号另起一行 1.2 编译器莫名其妙地给行尾加上分号 1.3 极度强调编译速度,不惜放弃本应提供的功能 1.4 错误处理机制太原始 1.5 垃圾回收器(GC)不完善、有重大缺陷 1.6 禁止未使用变量和多余import 1.7 创建对象的方式太多令人纠结 1.8 对象没有构造函数和析构函数 1.9 defer语句的语义设定不甚合理 1.10 许多语言内置设施不支持用户定义的类型 1.11 没有泛型支持,常见数据类型接口丑陋 1.12 实现接口不需要明确声明 1.13 省掉小括号却省不掉花括号 1.14 编...阅读全文

博文 2016-04-05 10:00:10 simplelovecs

深入Go UDP编程

目录 [−] 一个简单的例子更复杂的例子等价的客户端和服务器Read和Write方法集的比较通用多播编程标准库多播编程广播任播参考文档 用户数据报协议(User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报(package-oriented)的传输层协议,正式规范为RFC 768。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验。 由于缺乏可靠性且属于非连接导向协议,UDP应用一般必须允许一定量的丢包、出错和复制粘贴。但有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应...阅读全文

博文 2017-02-08 12:53:43 smallnest

Go语言实战 - 使用SendCloud群发邮件

自:http://www.kuqin.com/shuoit/20140303/338368.html 山坡网需要能够每周给注册用户发送一封名为“本周最热书籍”的邮件,而之前一直使用的腾讯企业邮箱罢工了,提示说发送请求太多太密集。 一番寻找之后发现了大家口碑不错的搜狐SendCloud服务,看了看文档,价格实惠用起来也方便,于是准备使用它做邮件发送服务器。按照文档的配置一步步走下来发现在发送邮件的时候竟然出错了,错误提示是“unencrypted connection”,奇怪了。 由于用的是smtp包的PLAIN认证方式,所以打开源代码看了看(SublimeText3+GoSublime里ctrl+. ctrl+a输入包名和结构名直接查看源代码,谁用谁喜欢),发现这里要求使用加密连接,否则就会...阅读全文

博文 2015-01-16 18:00:01 zhenxing1114

go语言序列化对象为二进制

package main import ( "bytes" "encoding/binary" "fmt" ) type Register struct { ACTION int32 SID int32 } func ExampleWrite() []byte { buf := new(bytes.Buffer) var info Register info.ACTION = 20004 info.SID = 6 err := binary.Write(buf, binary.LittleEndian, info) if err != nil { fmt.Println("binary.Write failed:", err) } fmt.Printf("% x\n", buf.Bytes(...阅读全文

博文 2015-06-17 23:07:25 body100123

golang 使用时间通过md5生成token

package main import ( "crypto/md5" "fmt" "io" "strconv" "time" ) func main() { crutime := time.Now().Unix() fmt.Println("crutime-->", crutime) h := md5.New() fmt.Println("h-->", h) fmt.Println("strconv.FormatInt(crutime, 10)-->", strconv.FormatInt(crutime, 10)) io.WriteString(h, strconv.FormatInt(crutime, 10)) fmt.Println("h-->", h) token := fmt.Sp...阅读全文

博文 2015-06-17 20:03:54 u012210379

golang 类型断言

golang类型断言 类型断言是一个使用在接口值上的操作 有时候,我们可能需要知道某个接口类型的实际类型,比如某个方法需要接收多种类型的数据并需要做分别处理,我们可以把形参设为空接口类型并接收任意类型的值,但是我们怎么反向知道里面实际保存的是哪个类型的对象呢? Comma-ok 断言 语法 value,ok := x.(T) x表示一个接口的类型,T表示一个类型(也可为接口类型) 该断言表达式会返回x的值和一个布尔值 可根据该布尔值判断x是否为T类型 如: func main() { var x interface{} x = 10 value, ok := x.(int) f...阅读全文

我读的go语言书籍

书名 地址 封面 《Go语言实战》 http://item.jd.com/12136974.html Go语言实战 《Go语言圣经》 https://yar999.gitbooks.io/gopl-zh/ Go语言圣经 《Go语言标准库》 https://github.com/polaris1119/The-Golang-Standard-Library-by-Example Go语言标准库 《Go语言并发之道》 https://item.jd.com/12504386.html Go语言并发之...阅读全文

博文 2019-02-14 22:32:40 weixin_33881050

Fortify安全编码规则包更新--2020.1.0

Fortify软件安全研究团队将前沿研究转化为增强Fortify产品组合(包括Fortify静态代码分析器(SCA),Fortify WebInspect和Fortify Application Defender)的安全情报。如今,MicroFocus Fortify软件安全性内容支持26种编程语言中的1,019个漏洞类别,涵盖了超过一百万个单独的API。Fortify软件安全研究(SSR)欣然宣布Fortify安全编码规则包(英语,版本2020.1.0),Fortify WebInspect SecureBase(可通过SmartUpdate获得)和Fortify Premium Content的更新立即可用。Micro Focus Fortify安全编码规则包[SCA]在此版本中,For...阅读全文

博文 2020-04-21 17:32:32 sinocax