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

Go语言atomic原子操作

atomic是最轻量级的锁,在一些场景下直接使用atomic包还是很有效的。 下面内容摘秒自《GO并发编程实战》—— 原子操作: CAS操作的优势是,可以在不形成临界区和创建互斥量的情况下完成并发安全的值替换操作。 这可以大大的减少同步对程序性能的损耗。 当然,CAS操作也有劣势。在被操作值被频繁变更的情况下,CAS操作并不那么容易成功。 原子操作共有5种,即:增或减、比较并交换、载入、存储和交换 1. 增或减 被用于进行增或减的原子操作(以下简称原子增/减操作)的函数名称都以“Add”为前缀,并后跟针对的具体类型的名称。 不过,由于atomic.AddUint32函数和atomic.AddUint64函数的第二个参数的类型分别是uint32和uint64,所以我们无法通过传递一个负的数值来...阅读全文

博文 2015-06-17 20:12:43 xcltapestry

golang的net包

package net import "net" net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。 虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。 Dial函数和服务端建立连接: conn, err := net.Dial("tcp", "google.com:80") if err != nil { // handle error } fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n") status, err := bufio.Ne...阅读全文

博文 2014-10-04 19:26:40 刘地

初探 Go 的编译命令执行过程

引言 Go 语言这两年在语言排行榜上的上升势头非常猛,Go 语言虽然是静态编译型语言,但是它却拥有脚本化的语法,支持多种编程范式(函数式和面向对象)。Go 语言最最吸引人的地方可能是其原生支持并发编程(语言层面原生支持和通过第三方库支持是有很大区别的)。Go 语言的对网络通信、并发和并行编程的支持度极高,从而可以更好地利用大量的分布式和多核的计算机。开发者可以通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。 2017年7月 TIOBE 语言排行榜 Go 首次进入前十。今天就让我们来探究探究 Go 的编译命令执行过程。 一. 理解 G...阅读全文

博文 2017-08-07 00:05:09 一缕殇流化隐半边冰霜

Golang HTTP GET POST请求

package main import ( "fmt" "io/ioutil" "net/http" "os" "strings" ) func GET() { client := &http.Client{} reqest, err := http.NewRequest("GET", "http://www.baidu.com/", nil) //建立一个请求 if err != nil { fmt.Println("Fatal error ", err.Error()) os.Exit(0) } //Add 头协议 reqest.Header.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;...阅读全文

博文 2015-05-19 04:00:00 dq4402935

Go语言获取本地IP地址

package main import ( "fmt" "net" "os" ) func main() { addrs, err := net.InterfaceAddrs() if err != nil { fmt.Println(err) os.Exit(1) } for _, address := range addrs { // 检查ip地址判断是否回环地址 if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { fmt.Println(ipnet.IP.String()) } } } ...阅读全文

博文 2015-07-12 20:00:01 冷絮

GoLang 字符串处理大全

package main import ( "fmt" "strings" //"unicode/utf8" ) func main() { fmt.Println("查找子串是否在指定的字符串中") fmt.Println(" Contains 函数的用法") fmt.Println(strings.Contains("seafood", "foo")) //true fmt.Println(strings.Contains("seafood", "bar")) //false fmt.Println(strings.Contains("seafood", "")) //true fmt.Println(strings.Contains("", "")) //true 这里要特别注意 fm...阅读全文

博文 2015-06-17 20:04:07 gzw13999

理解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

protobuf与protoc-gen-go

## 什么是protobuf Protobuf(Protocol Buffer)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。(参考[链接](https://baike.baidu.com/item/protocol%20buffer/1664400?fr=aladdin)) ## 什么是protoc protoc是prot...阅读全文

博文 2018-03-25 00:30:32 chalvern

GO,Beego带公众号的个人博客

## 个人博客源码 > 包含最新评论,点击排行,档案统计,留言,评论,回复留言,回复评论,日志,主题颜色修改等等 > 演示站点 http://leechan.online ### 更新 v1.1.0 > 接下来的v1.1.0版本将支持绑定公众号 新功能: 1. 素材管理 1. 自定义菜单 2. 消息群发 3. 关键词回...阅读全文

开源项目 2019-12-27 20:09:18 Lee Chan

【解读白皮书】公信宝

1.发起背景 2016年互联网金融的高速发展,以及个人征信和个人信息泄露的成为公众关注的焦点。互联网金融行业因为金融履约数据没有实现统一的共享和交易,整个行业风控水平较低,多头借贷问题严重。而传统数据交易所,包括政府或企业主导的中心化数据交易所、各细分行业公司组成的数据联盟、以及大数据征信公司,无一例外都没有发展起来,原因不是因为没有市场,而是传统数据交易所的解决方案存在巨大的漏洞,如数据“缓存沉淀”、对客户业务构成威胁、缺乏隐私保护、数据造假严重等问题,让企业不敢将重要的金融履约数据进行共享交易。 针对这些问题,目前只有区块链技术才能解决。在经过技术性、市场性的研究和发展方向的不断调整后,公信宝项目也由此定型。 2.项目简介 公信宝是去中心化数据交易所,区块链数据经济解决方案提供者,提供关...阅读全文

博文 2018-06-28 08:34:44 空灵一月

go reflect TypeOf 与ValueOf

学习go的反射对于理解go的底层实现以及接口机制有着非常重要的价值;本篇文章从一个源程序来体验一下go反射的两个核心函数TypeOf 和ValueOf的使用方法,特别体验下怎么根据type构造type实例的办法。 package main import ( "fmt" "reflect" ) type Speaker interface { Speak()string Set(string) } type Teacher struct { Name string } func (this *Teacher) Speak() string { return this.Name } func (this *Teacher) Set(name string) { this.Name = name ...阅读全文

博文 2015-06-18 09:03:56 hittata

golang中net包用法(二)--IP

IP地址(Internet Protocol Address,称为互联网协议地址,简写为IP Address),是一种给主机在Internet上进行编址的方式。 type IP //IP表示一个简单的IP地址,它是一个byte类型的slice,能够接受4字节(IPV4)或者16字节(IPV6)输入。注意,IP地址是IPv4地址还是IPv6地址是语义上的特性,而不取决于切片的长度:16字节的切片也可以是IPv4地址。 type IP []bytefunc IPv4(a, b, c, d byte) IP //ipv4返回一个ipv4地址格式(a.b.c.d)的地址,这是16-byte的 func ParseCIDR(s string) (IP, *IPNet, error) //ParseCI...阅读全文

博文 2015-06-18 17:06:14 chenbaoke

【项目分析】公信宝GXS

作为一个区块链超级小白,最开始的时候我以为公信宝就等同于布洛克城app,就是上传我们的数据,然后挖矿。在读了项目白皮书和其它资料后,才知道公信宝的世界超越我的想象,让我们一起来看看吧。 一、项目简介 GXChain(公信链)是公信宝团队打造的一条数据交换公有区块链,是公信宝数据交易所的底层链,不仅支撑着公信宝数据交易所高频的数据交易交换,还支持开发者开发应用。在公信链上开发应用,不仅可以利用区块链的技术特性,还可以获得各行业多维度数据的支持,做出非常落地于民生的有价值应用。 已经开发出来并上线的应用,证明了公信链在商业上的可用性,基于GXChain的第一个企业级应用——公信宝去中心化交易所,已经在2017年9月24日正式商业化落地。 基于公信链的第二个应用,也是第一个大型个人端应用——公信宝...阅读全文

博文 2018-06-28 18:34:40 不可一日不拱卒

golang——rune使用详解

一、定义 经常在开源库中,能rune关键字,从golang源码中看出,它是int32的别名(-231~231-1),对于byte(-128~127),可表示的字符更多。 二、使用 由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。 package main import ( "fmt" "unicode/utf8" ) func main() { var chinese = "我是中国人, I am Chinese" fmt.Println("chinese length", len(chinese)) fmt.Println("chinese word length", len([]rune(chinese))) fmt.Println...阅读全文

博文 2019-02-11 21:34:42 yushu1987

uint 与 int 的区别 (golang语言)

上面是图,下面是源码: package main import ( "fmt" _ "time" ) func main() { a := byte(255) //11111111 这是byte的极限, 因为 a := byte(256)//越界报错, 0~255正好256个数,不能再高了 b := uint8(255) //11111111 这是uint8的极限,因为 c := uint8(256)//越界报错,0~255正好256个数,不能再高了 c := int8(127) //01111111 这是int8的极限, 因为 b := int8(128)//越界报错, 0~127正好128个数,所以int8的极限只是256的一半 d := int8(a) //11111111 打印出来则...阅读全文

博文 2014-10-21 20:00:01 mokt2001

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

让golang在Raspberry Pi上飞一会

最近在玩2样东西,一样是go语言(golang),一样是Raspberry Pi(树莓派)。那么能在Raspberry上运行go语言程序吗? Golang的文档上说是支持多平台的,其中也包括了ARM,看来有戏了,兴冲冲打开http://code.google.com/p/go/downloads/list (golang编译器的下载页面) ,却发现没有arm平台的二进制大包下载。所以arm平台下的需要下载源码自己编译。 Raspberry上编译前准备及配置 一。俗话说巧妇难为无米之炊,要编译源码先得下源码,下载后这里解压到 /home/pi/go 目录下。 二。确认需要的工具系统已经具备了:mercurial 、gcc 和 libc6-dev 。如果不确定有没有只需输入下列命令: sudo ...阅读全文

博文 2014-10-04 19:26:59 quanpower

golang中的append函数详解

1. append函数是用来在slice末尾追加一个或者多个元素。 2. 当追加元素时,发现slice的**len>cap**时,会重新开辟一个**2*cap**的内存空间去存储追加过元素的slice。 3. 如果追加元素后slice的**len<=cap**,则append返回的新生成的slice的内存地址**依旧**是传入的slice参数的内存地址。 ```go testSlice := make([]int, 0) testSlice = append(testSlice, 0) fmt.Printf("len: %d, cap: %d, data:%+v \n", len(testSlice), cap(testSlice), testSlice) //len: 1, cap: 1,...阅读全文

博文 2018-11-12 14:56:01 lijingtian

如何用golang实现一个定时器任务队列

golang中定时器 golang中提供了2种定时器timer和ticker(如果JS很熟悉的话应该会很了解),分别是一次性定时器和重复任务定时器。 一般用法: func main() { input := make(chan interface{}) //producer - produce the messages go func() { for i := 0; i < 5; i++ { input <- i } input <- "hello, world" }() t1 := time.NewTimer(time.Second * 5) t2 := time.NewTimer(time.Second * 10) for { select { //consumer - consume ...阅读全文

博文 2018-05-23 01:33:04 o0无忧亦无怖

golang shadowsock 安装部署

最近一直在用ss但是python的并发并不是很好所以我改换成golang 的ss了。代码下载 编译好的直接下载 server配置(跟官方的不一样): 新建文件夹 进入文件夹后新建文件:config.json pid.cfg start.sh test.log config 是server运行的配置文件 pid.cfg 是server运行的进程号记录的位置 start.sh 是服务启动时候运行的脚本 test.log 这个是排查故障的时候用的错误记录文件 config.json 12345678{ "server":"XXX.com", //服务器ip地址或者绑定的域名 "server_port":8088, // 运行的端口 "local_port":1080, //本地运行端口 "pass...阅读全文

博文 2015-03-09 12:02:02 jianyingLi

GO微信小程序登录和支付

本文仅适用于微信小程序登录、支付golang服务器实现,而通用golang支付实现(支付宝、微信)请看另一篇。[官方文档]一、微信开发文档[微信支付][微信小程序服务器SDK][微信小程序客户端API]二、微信管理后台业务微信公众号管理后台,申请小程序,申请后需要注意两点: #. APPID、APPSECRET用于登录获取openid、sessionkey,其中openid用于支付API #. 开发配置小程序服务器域名和端口(eg: https://supercline.com:8090) 微信公众号商户后台:商户号(MCHID)和API支付密钥(APIKEY)三、HTTPS证书HTTPS服务器配置文档自己手动生成非认证调试证书Generate private key (.key) # Ke...阅读全文

博文 2019-08-21 16:03:11 SuperCLine

分布式存储Weed-FS源码分析

基于源码版本号 0.67 , 【Weed-FS又名叫Seaweed-FS】。 Weed-FS 是一个非常优秀的由 golang 开发的分布式存储开源项目, 虽然在我刚开始关注的时候它在 github.com 上面只有 star 50+, 但是我觉得这个项目是一个几千 star 量级的优秀开源项目。 Weed-FS 的设计原理是基于 Facebook 的一篇图片存储系统的论文 Facebook-Haystack, 论文很长,但是其实原理就几句话,可以看看 Facebook图片存储系统Haystack , 我觉得Weed-FS是青出于蓝而胜于蓝。 Weed-FS 这个开源系统涵盖的面比较多, 很难在一篇文章里面说清楚, 只能尽可能清楚的说说主要的部分。 源码目录结构 核心模块 weed 入口目录...阅读全文

博文 2015-02-15 18:31:39 YanyiWu

使用go语言编写IOS和Android程序

go语言目前已可以用来开发android和ios手机app。相关资料: 1、IOS https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!topic/golang-china/zEh_pdSLHDs 需要能访问google 源码:https://bitbucket.org/minux/goios 其它文档: https://medium.com/using-go-in-mobile-apps 2、Android 官方源码:https://github.com/golang/mobile 环境配置: http://studygolang.com/articles/2322 http://studygolang....阅读全文

博文 2015-05-19 03:00:11 baiyuxiong

Google 镜像站IP地址

非原版: Glgoo:http://www.glgoo.com/ 九尾搜索:http://www.jwss.com/ 谷粉搜搜:http://www.gfsswy.com/ 谷粉搜搜:http://gufensoso.com/ 谷粉恰搜:http://www.qiasou.com/ 蝴蝶:http://www.xiexingwen.com/ 一哥搜:http://www.egeso.com/ 谷歌搜:http://www.gugesou.com/ 谷壳:http://www.googke.me/ 南搜:http://nan.so/ 白鸽:http://baigeso.com/ GG搜索:http://ggsousuo.duapp.com/ 大中华:http://i.forbook.net/ ...阅读全文

博文 2015-09-08 09:00:01 Jr小王子

Go中进行字符集转换

Go代码本身是UTF-8的,而且官方没有提供相关字符集的转换库。不过,目前已经有一些开源库支持字符集转换。 1. [iconv-go](https://github.com/djimenez/iconv-go),通过cgo封装了iconv库; 2. [qiniu iconv](https://github.com/qiniu/iconv),同样通过cgo封装iconv库; 3. [go-charset](http://code.google.com/p/go-charset/),支持UTF-8转换为其他字符集(非iconv库),同时也封装了iconv,提供更多字符集的转换; 4. [Mahonia—a character-set conversion library fo...阅读全文

学习正则 - golang实现

元字符: 表1.常用的元字符 代码说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 字符转义: 如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\. 例如:deerchao\.net匹配deerchao.net,C:\\Windows匹配C:\Windows 重复: 你已经看过了前面的*,+,{2},{5,12}这几个匹配重复的方式了。下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,1...阅读全文

博文 2014-10-04 19:26:00 zhengJason

go调用exe

//调用exe func callEXE1() { arg := []string{} cmd := exec.Command("test", arg...) //会向 cmd.Stdout和cmd.Stderr写入信息,其实cmd.Stdout==cmd.Stderr,具体可见源码 output, err := cmd.CombinedOutput() if err != nil { fmt.Println("Error:", err) return } fmt.Printf("callEXE2结果:\n%v\n\n%v\n\n%v", string(output), cmd.Stdout, cmd.Stderr) } func callEXE2() { arg := []string{}...阅读全文

博文 2014-10-04 19:26:36 陈好

GoLang 实现一个最简单的http文件服务器

How to use github 地址:https://github.com/PolluxLee/GoServer 关闭防火墙 运行 GoServer.exe,不要关闭命令行窗口 将本地文件放到 go 文件根目录的 file 文件夹中即可实现内网共享文件 浏览器访问 http://localhost:8080/pollux/,将localhost替换成本地IP地址 GoServer.go package main import ( "log" "net/http" "os" ) func main() { os.Mkdir("file", 0777) http.Handle("/pollux/", http.StripPrefix("/pollux/", http.FileServer(h...阅读全文

博文 2017-04-04 14:51:28 PolluxLee

go sync.once用法

欢迎关注go语言微信公众号 每日go语言 golang_everyday sync.once可以控制函数只能被调用一次。不能多次重复调用。示例代码: package main import ( "fmt" "sync" "time" ) func main() { o := &sync.Once{} go do(o) go do(o) time.Sleep(time.Second * 2) } func do(o *sync.Once) { fmt.Println("Start do") o.Do(func() { fmt.Println("Doing something...") }) fmt.Println("Do end") } 输出结果: Start do Doing somethi...阅读全文

博文 2015-05-19 03:00:11 baiyuxiong

Golang文件名命名规则

1、平台区分 文件名_平台。 例: file_windows.go, file_unix.go 可选为:windows, unix, posix, plan9, darwin, bsd, linux, freebsd, nacl, netbsd, openbsd, solaris, dragonfly, bsd, notbsd, android,stubs 2、测试单元 文件名_test.go或者 文件名_平台_test.go。 例: path_test.go, path_windows_test.go 3、版本区分(猜测) 文件名_版本号等。 例:trap_windows_1.4.go 4、CPU类型区分, 汇编用的多 文件名_(平台:可选)_CPU类型. 例:vdso_linux_amd...阅读全文

博文 2016-09-22 07:00:01 zyjying520

阿里云解析智能线路,成就完美访问!

阿里云解析一直致力于为全球域名用户提供稳定、安全、高效、智能的解析服务,从万网时代 开始,延续到现在已经走过了20年的时间。今天,来自全球超过百万的用户,接近千万级的域名,在信任并使用着云解析的服务。 2014年,云解析正式宣布支持第三方域名的解析,将服务范围从原来单纯的万网域名,扩展到支持全世界将近2000多个后缀的域名,而这一数字仍然在持续增加。 2015年10月,云解析正式推出企业付费版本,为广大企业用户提供一系列高可用、高稳定性、高安全性的解析服务方案,满足不同企业不同规模不同方向的用户需求。 2016年4月,云解析再次“壕”华升级,宣布全面支持多线路运营商分省智能解析和多线路海外国家智能解析。覆盖范围包括移动、联通、电信、教育网的全国31个省市,也包括了海外6个大洲34个...阅读全文

golang获取调用者的方法名及所在源码行数

package main import "runtime" import "log" func main() { test() } func test() { test2() } func test2(){ pc,file,line,ok := runtime.Caller(2) log.Println(pc) log.Println(file) log.Println(line) log.Println(ok) f := runtime.FuncForPC(pc) log.Println(f.Name()) pc,file,line,ok = runtime.Caller(0) log.Println(pc) log.Println(file) log.Println(line) log....阅读全文

博文 2015-02-04 03:00:00 wangxusummer

偷看你在干嘛!golang实现, 基于dnsmasq的dns请求获取

源码地址 什么是dnsmasq(摘自网络) Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。此外它还自带了一个 PXE 服务器。 更多详细 https://wiki.archlinux.org/index.php/Dnsmasq_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 什么是dnsmasq_admin? 这个东西是针对dnsmasq产生的日志做筛选,将用户...阅读全文

博文 2014-10-04 19:27:43 Able

golang之交叉编译设置

俺的环境,os x,目的,生成64位linux的elf文件 直接下载osx的包就可以,不需要特意去下载源码包,我的go目录是~/golang/go cd ~/golang/go/srcCGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash 终端党 到工程目录直接执行 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build liteIde党 编译cross-linux64的配置文件,大概和这样差不多 # cross-compiler linux amd64 GOROOT=$HOME/golang/go GOBIN= GOPATH=$HOME/golang/3rdLibs:$HOME/golang/myLibs:$...阅读全文

博文 2014-10-04 19:26:01 ziyouchutuwenwu

golang实现中文汉字转拼音

载请注明出处: golang实现中文汉字转拼音 Golang 介绍 在一些的开发中,可能会遇到一些需要把中文汉字转成拼音的需求,在这里自己简单的用 golang 实现了一下中文转拼音的库。欢迎各位大佬前来指正。 2. 实现原理 实现起来的话,也非常简单,是将所有的汉字对应的 rune码,对应上它的拼音,也即是,有一个这样的 map[rune]string, 其中 key 为汉字的 rune码,value 就是汉字的拼音了。这个 map 是通过文件来生成的。文件内容如下: 3400=>qiū 3401=>tiàn 3404=>kuà 3405=>wǔ 3406=>yǐn 340C=>yí 3416=>xié 341C=>chóu 其中的拼音都是带声调的。不需要声调的话,可以替换成没有声调的字符...阅读全文

博文 2019-04-26 19:34:43 ChainZhang

go语言运行shell命令

// go语言运行shell命令 package main import ( "os/exec" "fmt" "os" "strings" ) func main() { var ip, whoami []byte var err error var cmd *exec.Cmd // 执行单个shell命令时, 直接运行即可 cmd = exec.Command("whoami") if whoami, err = cmd.Output(); err != nil { fmt.Println(err) os.Exit(1) } // 默认输出有一个换行 fmt.Println(string(whoami)) // 指定参数后过滤换行符 fmt.Println(strings.Trim(str...阅读全文

博文 2017-06-07 12:05:55 广训

Golang数组Array

数组Array 定义数组的格式:var package main import ( "fmt" ) func main() { //数组的长度也是类型的一部分,因此具有不同长度的数组为不同类型 var a [2]int //定义长度为2的int型数组。 var b [1]int //长度为1的int型数组 b = a fmt.Println(b)//此时编译时不通过的 } 数组的长度也是类型的一部分,因此具有不同长度的数组为不同类型 package main import ( "fmt" ) func main() { a := [20]int{19: 1} //长度为20的int型数组,索引位为19的赋值为1 b := [...]int{0: 1, 1: 2, 2: 3} //3个点代表不...阅读全文

博文 2017-09-30 09:30:01 skymyyang

判断相等的deepequal

博客地址: * [go-reflect-deepequal](https://github.com/Chasiny/Blog/edit/master/blog/go/package/go-reflect-deepequal.md) # DeepEqual ## 规则 ### 1.不同类型的值不会深度相等 Values of distinct types are never deeply equal. ```go type S1 struct { Field int } type S2 struct { Field int } func main() { fmt.Println(reflect.DeepEqual(S1{1}, S2{1})) } ``` >对应输出false ### 2.当两...阅读全文

博文 2018-05-15 16:38:37 chasiny

Golang slice 切片原理

golang 中的 slice 非常强大,让数组操作非常方便高效。在开发中不定长度表示的数组全部都是 slice 。但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果就是在实际开发中碰到很多坑,以至于出现一些莫名奇妙的问题,数组中的数据丢失了。 下面我们就开始详细理解下 slice ,理解后会对开发出高效的程序非常有帮助。 这个是 slice 的数据结构,它很简单,一个指向真实 array 地址的指针 ptr ,slice 的长度 len 和容量 cap 。 其中 len 和 cap 就是我们在调用 len(slice) 和 cap(slice) 返回的值。 我们来按照 slice 的数据结构定义来解析出 ptr, len, cap // 按照上图定义的数据...阅读全文

golang中net包用法(一)

net包对于网络I/O提供了便携式接口,包括TCP/IP,UDP,域名解析以及Unix Socket。尽管net包提供了大量访问底层的接口,但是大多数情况下,客户端仅仅只需要最基本的接口,例如Dial,LIsten,Accepte以及分配的conn连接和listener接口。 crypto/tls包使用相同的接口以及类似的Dial和Listen函数。下面对net包进行具体分析。 首先介绍其中常量: const ( IPv4len = 4 IPv6len = 16 ) 很容易看出这表示ip地址的长度(bytes),其中ipv4长度是4,ipv6地址长度是16 变量: 常用的ipv4地址: var ( IPv4bcast = IPv4(255, 255, 255, 255) // 广播地址 IP...阅读全文

博文 2015-06-17 20:17:00 chenbaoke

golang中json.Number妙用

最近跟某斯调试一个API接口,接口返回数据是json格式 ,按文档描述是一个整型数据,于是定义如下 type Data struct { Api int `json:"api"` } 在入参相同的情况下,第一次调用,得到的结果是: {"api":1} 然而第二次调用,得到结果却是: {"api":"1"} 与对方开发人员沟通后发现这是一个bug,由于流程问题,没办法立即修改上线,想想还是我做兼容比较好,效果是既能解析于{"api":1},也能够解析{"api":"1"},于是我想到了json.Number,Number类型定义如下 The representation of numbers is similar to that used in most programming languag...阅读全文

博文 2018-07-17 23:34:46 wu_sphinx

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

golang发送邮件

经测试成功 转自http://blog.csdn.net/zistxym/article/details/20235023 package main import ( "log" "net/smtp" "flag" "fmt" "strings" ) var ( subject = flag.String( "s","","subject of the mail" ) body= flag.String( "b","","body of themail" ) reciMail = flag.String( "m","","recipient mail address" ) ) func main() { // Set up authentication information. flag.P...阅读全文

博文 2015-06-18 17:04:34 u012210379

golang 生成图表

golang 支持生产图片的源码在下面地址可以看到: https://github.com/vdobler/chart 这个项目 的 example 目录下编译后,执行下面命令就可以生产所有它支持的图表。 example/example –All 这些生产的图表效果如下: bestof.png xautoscale.png xbar1.png xbar2.png xbar3.png xbox1.png xgraphics.png xhist.png xkey.png xlog1.png xmleten.png xpie1.png xpie2.png xscatter2.png xscatter3.png xstrip1.pn...阅读全文

博文 2015-03-27 09:46:00 ghj1976

golang的time.Format的坑

golang的time.Format设计的和其他语言都不一样, 其他语言总是使用一些格式化字符进行标示, 而golang呢, 查了网上一些坑例子 自己查了下golang的源码, 发现以下代码 // String returns the time formatted using the format string // "2006-01-02 15:04:05.999999999 -0700 MST" func (t Time) String() string { return t.Format("2006-01-02 15:04:05.999999999 -0700 MST") } 尝试将2006-01-02 15:04:05写入到自己的例子中 func nowTime() string {...阅读全文

博文 2015-03-30 10:00:16 sunicdavy

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