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

Go 开发的 DNS 库 DNS Go

DNS 是使用 Go 开发的 DNS 库,一个完整,可用的 DNS 库,支持所有广泛使用的 Resource Records,包括 DNSSEC 类型。DNS 支持服务器端和客户端编程开发。 目标: * KISS * 快 * 更小的 API 特性: * UDP/TCP 查询,IPv4 和 IPv6 * RFC 1035 域文件解析($INCLUDE, $ORIGIN, $TTL and $GENERATE (for all record types) * 快速 * 回应速度~ 80K qps (faster hardware results in more qps); * 解析 RRs ~ 100K RR/s, that's 5M records in about...阅读全文

【求助】为什么GODOC -http=:3999不会出来go标准库文档

为什么GODOC -http=:3999不会出来go标准库文档??? 在http://127.0.0.1:3999/中只会出来“A Touro of Go”的go语言教程页面!! 而且“godoc fmt”也是出来“A Touro of GO”网页!! 只有输入“go doc fmt”才在命令行中显示fmt包说明文档!! 我想在网页上查看本地化go标准库说明文档。请各位帮忙解答一下!!!...阅读全文

golang讲解(go语言)标准库分析之strings

来源:http://www.widuu.com/archives/01/941.html 今天我们继续哈,争取我们把strings包这个东西给弄完了,这已经也有两天没有好好更新了,所以这两天更新的比较多补充前两天的 (1)func Title(s string) string这个函数作用很简单,就是把输入的字符串首字母大写,参数是字符串返回的是字符串 1 import ( 2 "fmt" 3 "strings" 4 ) 5 6 func main() { 7 fmt.Println(strings.Title("hello word widuu write")) 8 } (2)func ToLower(s string) string这个函数是把字符串转换成小写,当然都是副本哦 1 impo...阅读全文

博文 2015-12-22 07:00:01 tingyuyiye01

GO 语言五步让你成为高手

这里是GO程序员的五个进化阶段: 第一个阶段(菜逼): 刚刚学习了这门语言。 已经通过一些教程或者培训班了解基本的语法,可以写短的代码片段。 第二个阶段 (探索者): 可以写一个完整的程序,但不懂一些更高级的语言特征,比如“channels”。还没有使用GO写一个大项目。 第三个阶段(大手): 你能熟练的使用Go, 能够用GO去解决,生产环境中一个具体和完整的问题。已经形成了一套自己的惯用法和常用代码库。在你的编码方案中Go是一个非常好用的工具。 第四阶段 (大神): 绝逼清楚Go语言的设计选择和背后的动机。能理解的简洁和可组合性哲学。 布道师: 积极地与他人分享关于Go语言知识和你对Go语言的理解。在各种合适的场所发出自己的声音, 参与邮件列表、建立QQ群、做专题报告。成为一个布道者不见得...阅读全文

博文 2016-08-08 15:00:01 yueguanyun

第 03 课:进阶模板用法

在上一节课中,我们学习了标准库中 [`text/template`](https://gowalker.org/text/template) 包提供的文本模板引擎的基础用法,了解了模板渲染和根对象的概念。这节课,我们将基于上节课的知识,进一步学习如何在 Go 语言提供的模板引擎中进行条件判断和更加复杂的逻辑操作。 ## 在模板中定义变量 变量不仅是 Go 语言中程序代码的重要组成部分,同样也是模板引擎中的主要元素。因为只有通过定义和操作变量,才能使得模板引擎在逻辑和用法上更加灵活和便利。 [`text/template`](https://gowalker.org/text/template) 包提供的文本模板引擎支持使用字母数字(Alphanumeric)作为变量的名称,并使用一个美元符号...阅读全文

博文 2019-11-10 08:55:32 Unknwon

分享| Go语言(golang)的认识,跟学习资料及其开发工具

这篇博客总结的有点突如其来,是真的! 今天下午我们的李坤师哥回来跟我们这帮师弟师妹做技术分享,第一点说的就是 Go 语言,讲真,在今天在这次分享会之前没有听过,后来在网上查才知道已经出来有几年了,虽然很新,自己真的悄然不知,不管今后能不能用到,感谢李坤师哥的这次分享! 傍晚分享会结束后自己回来做回顾,也就对最开始的 Go 语言感到好奇,之后分享的那些技术性的东西; 呃...呃,,,嘿... 没有听懂多少,目前菜鸟一枚,名副其实; 不过也还好拉,听了总比没听好,今后难免会有共鸣呢,到时候再倾尽自己的“洪荒之力”; 哈哈... 晚饭后就给自己划分了两个番茄的时间来了解这个东西,以下就是王川的了解跟整理了,希望于人于己有那么一点点用处! 2009年底,Go 语言(golang)第一个公开版本发布;...阅读全文

博文 2016-09-08 08:01:14 u010282984

Go语言的类型系统 - 翻译

概览 本文涉及到下面的几个方面: 声明新的用户自定义类型 为类型添加行为 何时用值类型何时用指针类型 使用接口实现多态 通过组合扩展和改变类型 标识符的暴露与不暴露 Go语言是一种静态类型的编程语言。编译器总是需要知道程序中的每个值的类型是什么。编译器提前知道值的类型信息,可以帮助程序安全的处理这些值。 这样可以减少潜在的bug或内存的破坏,同时还有机会让编译器产生更有效的代码。 变量的值类型为编译器提供两条信息: 值的尺寸: 需要为值分配多少内存。 内存代表什么。 很多内置类型中,类型名同时包含了值尺寸和所代表的东西。 比如int64类型表示需要8个字节内存(64位), 代表的是整数值。 float32类型表示需要4个字节内存(32位), 代表的是IEEE-754浮点数。bool类型需要一...阅读全文

博文 2018-05-03 05:34:36 WalkerQiao

开篇词:知其然知其所以然,以理解为驱动的学习

大家好,我是无闻,咱们又见面了。很多人会通过我的 GitHub 用户名 @unknwon 了解到我。作为一个 Go 语言爱好者和开源作者,我在 GitHub 上发布了许多 Go 语言相关的开源项目,其中不乏与 Web 开发相关的,包括 Macaron Web 框架和 Gogs 项目。在 2013 年,我通过 GitHub 发布了一套使用 Go 语言进行 Web 开发的视频教程《Go Web 基础》,许多同学在学习完成之后觉得不够过瘾,认为只是学到了某一个 Web 框架的具体用法,而不是真正地从 Go 语言的角度去学习开发一套 Web 应用组件。出于这个原因,我觉得非常有必要通过另一套课程来详解如何在 Go 语言中从零构建一套属于自己的 Web 应用开发体系。 ## 课程背景 Go 语言具有天...阅读全文

博文 2019-11-08 11:19:55 Unknwon

【golang系统编程】通用IO模型

所有执行I/O操作的系统调用,都使用一个非负整数(文件描述符)来描述打开的文件(文件、管道、socket、终端、设备)。 常见的3种文件描述符: 文件描述符 用途 POSIX名称 stdio流 0 标准输入 STDIN_FILENO stdin 1 标准输出 STDOUT_FILENO stdout 2 标准错误 STDERR_FILENO stderr 通用IO模型的4个系统调用 下面的四个系统调用为c语言的形式 fd = open(pathname, flags, mode):pathname是打开的文件名,flags指定文件的打开方式,mode指定文件的访问权限,返回的fd为上文所说的文件描述符 num = read(fd, buffer, count):从buffer中读取至多n个字...阅读全文

博文 2019-12-14 09:32:38 geange

使用go-redis包进行set操作 但是返回 io timeout

func init() { pwd_path, _ := os.Getwd() file_path := pwd_path + "/config" log_file_path = pwd_path + "/push_log.log" url := share_api.Get_config_info("mysql", "mysql_url", file_path) err := dbvisit.Connect_db(url) share_api.Check_err("connect mysql err:", err) //连接ald_services数据库中app_token_info表 //redis redis_url := share_api.Ge...阅读全文

【LeetCode】Reverse Integer Go语言实现

问题描述 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 题意很明确,将一个整数反转输出。 思路 首先不用考虑用库函数先转为字符串再反转的方式,这根本不是算法。 整体解决思路为,依次取出整数的每一位数,然后反转,再组装成整数即可。有几个点需要考虑: 取末位数。 num % 10 即可。 去掉末位数。 num / 10 即可。 组装整数。定义 sum := 0, 循环数字序列,每次 sum = sum * 10 + 数字即可 溢出问题。问题规定了整数为32位,因此最大值为0x7FFFFFFF, 最小值为-0x80000000 Go实现 用时6ms, 击败20%...阅读全文

博文 2016-11-25 10:00:08 tracker_w

Go语言的后缀数组模块尝鲜

golang.org网站的全文搜索是基于suffix array实现的【http://t.cn/hBJekg】,可能觉得效果不错,就把suffix array添加到golang的标准库里面了。【http://t.cn/hBJekd】 package main import "fmt" import "index/suffixarray" func main() { fmt.Println("Hello, 世界") str:= `The Go programming language is an open source project to make programmers more productive. Go is expressive, concise, clean, and effic...阅读全文

博文 2015-12-21 21:00:08 fxsjy

Go 中的模糊(Fuzz)测试

![由 Renee French 创作的原始 Go Gopher 作品,为“ Go 的旅程”创作的插图。](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191025-Go-Fuzz-Testing-in-Go/Illustration.png) 模糊测试(Fuzzing)是一项使用随机数据加载我们程序的测试技术。是[对常规测试的补充](https://docs.google.com/document/d/1N-12_6YBPpF9o4_Zys_E_ZQndmD06wQVAM_0y9nZUIE/edit),并且使开发者可以发现那些在手工生成的输入下难以发现的 bug。模糊测试在 Go 程序中很容易设置,...阅读全文

博文 2020-05-31 17:10:08 dust347

PHP与Golang如何通信?

最近遇到的一个场景:php项目中需要使用一个第三方的功能(结巴分词),而github上面恰好有一个用Golang写好的类库。那么问题就来了,要如何实现不同语言之间的通信呢? 常规的方案: 用Golang写一个http/TCP服务,php通过http/TCP与Golang通信 将Golang经过较多封装,做为php扩展。 PHP通过系统命令,调取Golang的可执行文件 存在的问题: http请求,网络I/O将会消耗大量时间 需要封装大量代码 PHP每调取一次Golang程序,就需要一次初始化,时间消耗很多 优化目标: Golang程序只初始化一次(因为初始化很耗时) 所有请求不需要走网络 尽量不大量修改代码 解决方案: 简单的Golang封装,将第三方类库编译生成为一个可执行文件 PHP与G...阅读全文

博文 2017-02-10 14:33:54 Dorm_Script

goroutine背后的系统知识[转]

Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 操作系统与运行库 并发与并行 (Concurrency and Parallelism) 线程的调度 并发编程框架 goroutine 1. 操作系统与运行库 对于普通的电脑用户来说,能理解应用程序是运行在操作系统之上就足够了,可对于开发者,我们还需要了解我们写的程序是如何在操作系统之上运行起来的,操作系统如何为应用程序提供服务,这样我们才能分清楚哪些服务是操作系统提供的,而哪些服务是...阅读全文

博文 2014-10-04 19:26:42 chai2010

使用golang的标准库搭建网站--3.模板函数

和大多数语言的的模板语法类似:{{.Name | FuncName}} go本身自带了一些模板函数,我们现在来看一看如何自定义模板函数: 先来看一个函数声明: func (t *Template) Funcs(funcMap FuncMap) *Template Funcs函数就是用来创建我们模板函数的函数了,它需要一个FuncMap类型的参数,继续看手册 type FuncMap map[string]interface{} 官方文档里是这么解释的 FuncMap is the type of the map defining the mapping from names to functions. Each function must have either a single retur...阅读全文

博文 2016-01-29 16:00:01 mybc724

golang(2):beego 环境搭建

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46695513 转载请一定注明出处。 1,关于beego beego是一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra,支持例如以下特性 MVC,REST,智能路由,日志调试,配置管理,模板自己主动渲染,layout设计 中间件插入逻辑,方便的JSON/XML服务 官网 http://beego.me 站点非常花哨呢。 2。头疼的gopath Go从1.1版本号開始必须设置这个变量,并且不能和Go的安装文件夹一样,这个文件夹用来存放Go源代码,Go的可执行文件,以及对应的编译之后的包文件。所以这个文件夹以下有三个子文件夹:src、bin、pkg...阅读全文

博文 2016-01-17 03:00:01 blfshiye

一文读懂Go的net/http标准库

点击标题下「异步图书」可快速关注京东质量测试技术论坛将于12.16日在人民邮电出版点击标题下「异步图书」可快速关注京东质量测试技术论坛将于12.16日在人民邮电出版点击标题下「异步图书」可快速关注对推广运营同学而言,如果用一个词来代表Web时代的话,那一定是“百度”。这个时代,百度牢牢占据互联网流量入点击标题下「异步图书」可快速关注对推广运点击标题下「异步图书」可快速关注对推广运点击标题下「异步图书」可快速关注 在进行Web应用开发的时候,使用成熟并且复杂的Web应用框架通常会使开发变得更加迅速和简便,但这也意味着开发者必须接受框架自身的一套约定和模式。虽然很多框架都认为自己提供的约定和模式是最佳实践(best practice),但是如果开发者没有正确地理解这些最佳实践,那么对最佳实践的应...阅读全文

博文 2017-12-06 14:58:23 异步图书

Go开发关键技术指南

本文讨论了服务器领域常见的并发等问题,也涉及到了工程化相关的问题,也整理了C背景程序员对于Go的GC以及性能的疑问,探讨了Go的错误处理和类型系统最佳实践,以及依赖管理的难处,接口设计的正交性,当然也包含我们在服务器开发中对于Go实践的总结,有时候也对一些有趣的问题做深度的挖掘,也列出了Go重要的事件和资料集合,还有Go2的进展和思考。我更想从问题本身出发,不局限于Go语言,探讨服务器中常常遇到的问题,最后回到Go如何解决这些问题,提供Go开发的关键技术指南。 本文最初发布于GoDevGuide,欢迎来github阅读原文。 Go开发关键技术指南 原图链接地址:https://www.processon.com/view/link/5df22829e4b010171a411e7d#map 感...阅读全文

博文 2020-01-11 06:32:48 winlinvip

[golang] pretty print json并不受欢迎?

golang相比c++/java,崇尚简单,不附加没什么吊用的函数或类库,比如下面的这个函数就是简单的转成json。在社区里有人不推荐封装成函数使用,因为违背了golang的语言风格,“这么简单的两行代码,何必封装成包或函数使用呢?” 但是,其实挺好用,你怎么看呢? // Only for normal logging purpose, 4 space indent func PrettifyJson(i interface{}, indent bool) string { var str []byte if indent { str, _ = json.MarshalIndent(i, "", " ") } else { str, _ = json.Marshal(i) } return ...阅读全文

博文 2019-07-26 20:32:41 liuzoxan

golang 后台服务设计精要

#### [原文地址](http://litang.me/post/golang-server-design/) ### 守护进程 传统的后台服务一般作为守护进程(daemon)运行。linux 上创建 daemon 的步骤一般如下: 1. 创建子进程,父进程退出; 2. 调用系统调用 `setsid()` 脱离控制终端; 3. 调用系统调用 `umask()` 清除进程 umask 确保 daemon 创建文件和目录时拥有所需权限; 4. 修改当前工作目录为系统根目录; 5. 关闭从父进程继承的所有文件描述符,并将标准输入/输出/错误重定向到 `/dev/null`。 前 3 个步骤是必须的。一些用来创建 daemon 的第三方库(比如[这个](https://github.com/sev...阅读全文

博文 2018-11-18 15:12:40 darlingtangli

golang讲解(go语言)标准库分析之strings结束篇

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 今天我们完结了这个strings的包,其实我们就剩下了type Reader和type Replacer这个我们之间讲过io的包,这样大家理解起来就比较省劲了! (1)func NewReader(s string) *Reader通过读取一个字符串之后返回Reader对象,然后实现io.Reader, io.ReaderAt, io.Seeker, io.ByteScanner, 和io.RuneScanner 接口 import ( "fmt" "reflect" "strings" ) func main() { reader := strings.NewReader("widuu we...阅读全文

博文 2017-02-09 18:40:53 widuu

go第二天

读the way to go笔记 https://github.com/Unknwon/the-way-to-go_ZH_CN 第二个章节讲的是go的安装和运行环境,我以前写过linux下的go安装了,windows和mac的安装就不记下来了,它的环境变量的意思值得记下来 $GOROOT 表示 Go 在你的电脑上的安装位置,它的值一般都是 $HOME/go,当然,你也可以安装在别的地方。 $GOARCH 表示目标机器的处理器架构,它的值可以是 386,amd64 或 arm。 $GOOS 表示目标机器的操作系统,它的值可以是 darwin,freebsd,linux 或 windows $GOBIN 表示编译器和链接器的安装位置,默认是 $GOROOT/bin,如果你使用的是 Go 1.0....阅读全文

博文 2015-01-23 05:00:01 threeyax

一个正在悄然崛起的编程语言——Golang

Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。 该语言自推出以来,Google的Go编程语言(Golang)越来越受主流用户的欢迎。在2016年12月的一份调研中,3,595名受访者中有89%表明他们在工作中或工作以外用Go语言编程;此外,在编程语言中,Go语言在专业知识和偏好方面排名最高。2017年7月,在Tiobe的年度编程语言排名中,Go语言从去年的第55名一跃跳到了第10名。 流行的go应用Go语言的杀手级应用就是Docker,Docker应该大家都知道,目前在国内火的一塌糊涂Codis,一种Redis的集权解决管理方案,很大部...阅读全文

博文 2019-04-04 20:34:39 程序员瑞

GO笔记之详解GO的编译执行流程

上篇文章介绍了Golang在不同系统下的安装,并完成了经典的Hello World案例。在这个过程中,我们用到了go run命令,它完成源码从编译到执行的整个过程。 今天来详细介绍下这个过程。简单理解,go run 可等价于 go build + 执行。 ## build命令简述 在Golang中,build过程主要由go build执行。它完成了源码的编译与可执行文件的生成。 ![image.png](https://static.studygolang.com/190520/bd0c9e15566e89a56d5dd20c6928db4e.png) go build接收参数为.go文件或目录,默认情况下编译当前目录下所有.go文件。在main包下执行会生成相应的可执行文件,在非main包...阅读全文

linux go环境安装

linux go环境安装 方法一 这次将源码包安装的目录是是/root下。 1、官网下载源码包。 官网链接:https://golang.org/dl/。ps:本人的是linux服务器,所以选择红框标注的 wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz 2、解压安装 tar -zxvf go1.9.2.linux-amd64.tar.gz mkdir -p workspace/src vim ~/.bashrc export GOROOT=$HOME/go export GOPATH=$HOME/workspace export PATH=$GOROOT/bin:$GOPATH/bin:$PATH s...阅读全文

博文 2018-08-07 00:30:00 xiaocongcong888

学习编程的25个“坑”,你踩到了吗?

学习编程的过程中可能会遇到“25”个“坑”,不仅初学者可能中招,专业人士有时也难以逃脱,我自己也毫不例外。0. 忽视了编程终究是以人为本的。是的,机器的确会执行你的代码,但编程是为人们解决问题的,将他们的需求转换为由其他人(或你自己线下)读取,维护和修改的代码。1. 未能花充足的时间练习编程。 根据工作或日程安排,你可能会花费大量时间在与编程相关的任务上,但实际上这些并非编程本身。2. 停留在你正在学习的某个技术的表面。 沾沾自喜于自己掌握了足够完成任务的基础知识,对技术的了解却只流于表面,未有触及核心内容。3. 在编程学习中挑挑拣拣,无法持之以恒。一开始学习Rails,半道儿你发现Phoenix也不错,哦,学点JavaScript吧,这样就能用Node.js 了......从TJ转到Go然...阅读全文

博文 2018-10-25 18:34:40 西安北大青鸟官微

golang 函数四 (错误处理)

为了方便实现自定义错误类型,Go语言标准库中将error定义为接口类型。比如:type error interface{ Error() string }按照Go语言编程习惯,error总是最后一个函数返回值,并且标准库提供了创建函数,可以方便的创建错误消息的error对象。比如:func divTest(x ,y int)(int, error){ if y == 0{ return 0, errors.New("division by zero") //创建错误消息的error对象 } return x/y,nil } func main(){ v, err := divTest(3,0) if err != nil{ log.Fatalln(err.Error()) } println...阅读全文

博文 2017-02-10 11:11:37 100018

golang标准库中的encoding/gob包

一、golang中的gob包是什么?gob是golang包自带的一个数据结构序列化的编码/解码工具。二、go标准库中的gob编码规则当发生方传递的是struct{A,B int}结构的值,接收方可以允许前9种结构,但是后4四种结构却是不允许的。允许模拟相似,但是不允许矛盾。各个类型的编码规则1、结构体内只有导出字段并且导出字段才能被编码和解码2、编码至少存在一个可编码字段,解码也至少需要一个能被解码字段,不然会报错。3、解码方的导出字段必须存在与编码后的同名字段,类型一致,或者接收方为同类型指针,或为指向指针的指针类型。(比如,编码:A int,则解码可以为A int,A *int,A **int,这三种的一种,虽然A ***int不会报错,但是接收不到值),如果导出字段名称一样,但是类型不...阅读全文

博文 2019-07-17 18:32:42 CC_ab48

LeetCode - 字符串相乘 - Golang

题目:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 num1 和 num2 的长度小于110。 num1和 num2只包含数字 0-9。 num1和 num2 均不以零开头,除非是数字 0 本身。 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理 基于竖式乘法,先逐位乘算,再进位相加: func multiply(num1 string, num2 string) string { // 有0参与直接返回0 if num1 == "0" || num2 == "0" { return "0" } // 某个为1直接返回另一个 if num1 == "1" { return...阅读全文

博文 2020-02-15 20:32:39 邹友

sspanel按月结算,修改go版代码【mysql api】

开头感谢sspanel的作者orvice大神!【转载请注明】 博主最近在搭建sspanel v3,中间坑确实挺多的,我回头开贴补充一下,ss服务器端我选择了orvice的shadowsocks-go mu版,因为作者是基于流量控制的机理,实际上奸商都是通过时间控制(233),所以我就寻思在作者的基础上加以修改,添加时间的限制。 注:此版本基于mysqlapi,webapi的修改方式令开贴 我在sspanel数据的user表中添加了两个字段:end_time int,到期日期(1970开始的时间戳);package_type int 套餐类型(无,月,三个月,半年,一年)。 具体可以根据自己实际需要情况修改。 首先,我们找到用户控制代码,在shadowsocks-go-mu\mu\mysql\...阅读全文

golang中Context的使用场景

context在Go1.7之后就进入标准库中了。它主要的用处如果用一句话来说,是在于控制goroutine的生命周期。当一个计算任务被goroutine承接了之后,由于某种原因(超时,或者强制退出)我们希望中止这个goroutine的计算任务,那么就用得到这个Context了。关于Context的四种结构,CancelContext,TimeoutContext,DeadLineContext,ValueContext的使用在这一篇快速掌握 Golang context 包已经说的很明白了。本文主要来盘一盘golang中context的一些使用场景。更多go语言内容请关注:http://www.fastgolang.co...阅读全文

《Go 同步和并发设计模式》培训会后整理

今天参加《Go 同步和并发设计模式》主题培训,虽然早上下雨,但是大家一般还是都在9点左右赶到现场。本次分享时间很充沛,晁老师讲的也很细致,4点就结束了高于预期啊呵呵,全程听下讲座来收获还是很多的,下面整理一下今天感觉重点的内容。golang中使用channel的使用率占30%,但错误率缺高于50%错误原因大多是使用channel不适当造成的。读写锁RWMutex、Mutex不支持方法重入,想要实现重入可以使用黑科技goid 或者用 token使用Cond方法进行同步操作容易出错,推荐使用简单易用的sync.WaitGroup推荐使用go build race 进行锁竞争性检测,go vet 静态代码检测是否存锁值拷贝(因为拷贝锁值也会拷贝锁的状态信息,所以锁尽量使用指针来创建)。sync.P...阅读全文

博文 2019-05-26 23:06:44 牛儿吃草仗剑天涯

golang标准库之path/filepath

package main import ( "fmt" "os" "path/filepath" ) func WalkFunc(path string, info os.FileInfo, err error) error { fmt.Println("File:", path, "IsDir:", info.IsDir(), "size:", info.Size()) return nil } func main() { // func IsAbs(path string) bool // IsAbs返回路径是否是一个绝对路径 fmt.Println(filepath.IsAbs("/dev/null")) // false // func Abs(path string) (strin...阅读全文

博文 2019-10-01 16:32:45 aside section ._1OhGeD

NoSQL笔记

#### 非关系数据库的相关问题 * 什么是最终一致性(Eventual Consistency)? "过程松,结果紧,最终结果必须保持一致性" 最终一致性模型是用于分布式系统中,用来实现高可用性,确保在如果一个更新操作发生,那么最终一定可以读取到这次更新操作的发生。最终一致性在分布式领域广泛使用,采用多个副本形式。如果一个系统实现了最终一致性,那么这个系统可以成为收敛的,或者叫做实现了副本收敛。相比与传统的ACID,最终一致性提供的是BASE(Basic Availablilty, Soft state, Eventual Consistency)服务。 最终一致性缺点:在系统达到副本收敛之前,系统有可能返回任何值。 * NoSQL是如何解决可伸缩性的挑战的...阅读全文

Go的栈空间管理

栈空间管理的基本逻辑 go语言通过goroutine提供了并发编程支持,goroutine是go运行库的功能,而不是操作系统线程实现的,goroutine可以被理解成一个用户态的线程。 既然goroutine是由go运行库管理的,那么go运行库也需要为每个goroutine创建并管理相应的栈空间,为每个goroutine分配的栈空间不能太大,goroutine开多时会浪费大量空间,也不能太小,会导致栈溢出。go语言选择栈的栈空间管理的方式是,一开始给一个比较小的空间,随着需要自动增长。当goroutine不需要那么大的空间时,栈空间也要自动缩小。 分段栈 Segment Stacks 在go 1.3之前,go使用分段栈。 分段栈实现了一种不连续但是可以持续增长的栈,开始时,栈只有一个段,当需...阅读全文

博文 2018-10-11 19:34:39 simpleapples

Go总体介绍

1 Go语言项目 1.1 来源和特点 Go语言,即Golang,是Google公司于2009年11月正式对外公开的一门编程语言,有以下特性:静态强类型语言、编译型语言、并发型语言。Go语言的语法比较接近C语言,变量声明不太一样,有垃圾回收的机制。 Go语言并不包括类似C++的枚举、异常处理、继承、泛型、断言、虚函数等功能。但是可以用一种方式去实现类似继承(接口编程),面向对象编程模式。Go语言有一些核心的特性:channel(管道),切片(slice),并发等。1.2 项目背景 Go语言于2007年由3个人发起设计,分别是罗伯特格瑞史莫,罗勃派克(Unix小组的成员),以及肯汤普逊(设计和实现了Unix系统,是C语言的前身-B语言的创造者)。 Go语言是基于Inferno(创造并支持分布式服...阅读全文

博文 2019-01-14 17:34:44 华哥Dean

Golang包管理--GoVender

(一)govender的功能 govender 是对Golang的包依赖管理的一个插件,该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。 govender的几种状态。 状态 缩写 含义 +local l 本地包,即项目自身的包组织 +external e 外部包, 被GOPATH管理 +vender v 被govender 管理 +std s 标准库 +unused u 未使用的包 +missing m 代码引用了依赖包,但是该包找到 +program p 主程序包,意味着可以编译为执行文件 +outside 外部包和缺失的包 +all 所有包 (二)govender 的基本使用 下载 go g...阅读全文

博文 2018-11-29 13:34:42 L白水飘萍

GO语言预备知识 2019-5-8

昨晚大概3点钟睡了,现在10点半,才刚刚起来,新加坡的窗外暴雨滂沱。感觉像是要山洪爆发一样,继续看视频吧,反正也出不去。一、P20:转义字符-类似c语言,注意\r 回车符与\n换行符的区别。/r从当前行的最开头开始输出,覆盖掉原有内容。如:美利坚合众国\r希拉里输出结果:希拉里合众国P21:常见错误,(过于基础可以跳过)P22:注释,类C (跳过)注意块注释不能嵌套P23:代码风格-1、官方推荐尽量用行注释 快捷键ctrl+/ 2、正确的缩进和空白 快捷键shift+tab 整体向左移动 tab 控制整体向右移动 3、gofmt 指令 gofmt (-w)test.go 4.运算符两边习惯性加一个空格 5.func 风格举例 正确风格func main(){XXXXXXXXX}错误风格fun...阅读全文

博文 2019-05-08 19:35:18 竖琴犹奏相思苦

加密算法排排队

最近在看 Golang 的标准库,看到 crypto 中的 aes、des、 ars、sha 等等,顿时觉得熟悉又陌生,平时开发时遇到需要加密解密的时候总是看看文档 copy 过来,不求甚解,是时候把他们排排队,分分类了。 对称加密 同一个密钥 常见算法:DES、3DES、DESX、RC4、RC5、RC6和AES DES (Data Encryption Standard) 类:最早的一批加密算法,主要用于金融和嵌入式设备,但由于用密钥(56位)过短,所以安全性受到质疑。 注:其实,编程的世界里非常注重命名,尤其是协议和规范,所以我们不能只看缩写,还是得了解一下缩写代表的是哪几个单词。 AES (Advanced Encryption Standard) 从名字上可以看出是更为安全的加密方式...阅读全文

博文 2017-09-29 21:04:57 王安正

关于vc go to definition定位不准的问题

参考网页地址: http://topic.csdn.net/t/20050222/14/3797843.html 今天将一个vc工程拷贝了一份到当前文件夹下保存,并用vc打开复制的工程开始修改程序,发现在使用在头文件里使用go to definition时,经常跳转到拷贝前的那个工程源文件里,而不是当前源文件里。另外,记得以前使用vc时也经常出现go to definition操作跳转不准,老是错位几行。仔细查了以下,发现go to definition与debug/release下的*.bsc文件有关,只要删掉这个文件,重新编译这个问题就可以解决了。 于是照这样做,但是有另外一个问题,出现如下报错,can't open *.bsc,查询原因,由于*.bsc是在编译时产生的*.sbr的基础上...阅读全文

博文 2015-06-17 23:08:08 czg1984

Golang标准库源码阅读 - net/http.Transport

最近实现网关的时候采用了http.Transport来实现了http协议反向代理,踩了一些坑,浪费了一些时间解决问题,最后下定决心要把源码好好看一下,并把部分遇到的涉及RoundTrip问题及解决办法加以记录。 在使用net/http库发送http请求,包括net/http/client.go中提供的各种方法最后都会调用Transport的RoundTrip方法,Transport实现了RoundTripper接口,RoundTripper is an interface representing the ability to execute a single HTTP transaction, obtaining the Response for a given Request. Roun...阅读全文

博文 2019-01-29 17:34:47 GenuineJyn

GO语言学习——简单的key-valeu数据库的实现

写一个简单的key-value数据库,实现下面几个接口。 db:new() => Db. db:destroy(Db) => ok. db:write(Key, Element, Db) => NewDb. db:delete(Key, Db) => NewDb. db:read(Key, Db) =>{ok, Element} | {error, instance}. db:match(Element, Db) => [Key1, ..., KeyN]. 例子: 1> c(db). {ok,db} 2> Db = db:new(). [] 3> Db1 = db:write(111,222, Db). [{111,222}] 4> Db2 = db:write(333, 444, Db1)...阅读全文

博文 2015-12-21 21:00:02 zhenxing1114