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

Golang中的error类型

Golang中的error类型 error类型本身就是一个预定义好的接口,里面定义了一个method type error interface { Error() string } 生成一个新的error并返回 一般有以下几种处理方式: package main import ( "errors" "fmt" ) type Customerror struct { infoa string infob string Err error } func (cerr Customerror) Error() string { errorinfo := fmt.Sprintf("infoa : %s , infob : %s , original err info : %s ", cerr.info...阅读全文

博文 2015-06-27 03:00:00 Goden

Go 中 defer 的 5 个坑 - 第一部分

> 通过本节的学习以避免掉入基础的 defer 陷阱中 本文只适合想要进阶学习 Golang 的新手阅读,大牛请绕道。 ## #1 -- defer nil 函数 如果一个延迟函数被赋值为 `nil` , 运行时的 [`panic`](https://golang.org/ref/spec#Handling_panics) 异常会发生在外围函数执行结束后而不是 `defer` 的函数被调用的时候。 例子 ```go func() { var run func() = nil defer run() fmt.Println("runs") } ``` 输出结果 ``` runs ❗️ panic: runtime error: invalid memory address or nil poi...阅读全文

博文 2017-12-26 15:11:12 polaris

Golang中JSON的运用解析

本篇文章翻译自Elliot Chance的"Working With JSON in Go",原文地址“http://elliot.land/working-with-json-in-go” 。欢迎大家访问[我的博客](http://zuozuohao.github.io/),代码可以在[@Zuozuohao](https://github.com/Zuozuohao/GolangGOFPatterns)下载。 在强类型语言中使用JSON是需要一些技巧的。技巧的意思是数据从JSON数据结构到语言支持的数据结构的转换可以灵活的进行,反之亦然。从而避免在操作数组和字典的时候产生类型检查和运行时类型转换的冗余代码。Go在这方面做了很多杰出的工作,正如Go在其他方面做出的努力一样。 Go...阅读全文

Go 中如何有效的比较字符串

当优化软件时字符串比较可能和你想的有些不同。特别是包括拆分跨 goroutines 的循环, 找到一个更快的哈希算法,或者一些听起来更科学的方式。当我们做出这样的修改时,会有一种成就感。然而, 字符串比较通常是信息传递中(in a pipeline)的最大瓶颈。下面的代码段经常被使用,但它是最糟糕的解决方案 (参见下面的 benchmarks),并导致了实际问题。 ```go strings.ToLower(name) == strings.ToLower(othername) ``` 这是一种很直接的写法。把字符串转换成小写,然后在比较。要理解为什么这是一个差的解决方案,你需要知道字符串是如何表示的,以及 `ToLower` 是如何工作的。但是首先,让我们讨论一下字符串比较中主要的使用场景...阅读全文

Golang部份特性的C++对比实现

今天看到一篇文章<>, 我个人是认为这个说法是不成立的,但这里面的一些特性对比引起了我的兴趣。 我想尝试下,Go语言所带的一些东西,在C++11中是如何做的,应当很有意思。所以刷刷刷,就有了下面的东西。 目录: 字符串字面值 变量初始化 lambda 值顺序递增 多值赋值及函数返回多值 map查找 可变参数 回调函数 泛型 数组和切片 字面值 这个东西在两种语言中都有比较好的解决方式.Go语言用" ` "符号,C++使用R(" )"这种方式。可以省掉不少转义符的输入。 Golang path := `c:\a\b\c\GG再也不用烦转义符了` mulln := `"(C++/Golang aa'aaa\Cplusplus/gogogo author"xion...阅读全文

博文 2014-12-16 10:00:15 xcltapestry

搞定淘宝,京东 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 { ...阅读全文

【Go1.4】主要改动

Go 1.4 计划9月份冻结代码,12月份发布,目前官方公布的主要改动有: 1、规范:允许 for range x 这种写法 原因:在标准库中,存在这样的写法 // unicode/utf8/utf8.go func RuneCountInString(s string) (n int) { for _ = range s { n++ } return } 很显然,这里不关心具体的index或value,同时,既然可以省略 value,为什么不能将 index 也省略。因此,加入了这种语法。这样,上面的代码变为: for range s { n++ } 详情: 1. [issue 6...阅读全文

Go 1.4 新特性

Go 1.4 计划9月份冻结代码,12月份发布,目前官方公布的主要改动有: 1、规范:允许 for range x 这种写法 原因:在标准库中,存在这样的写法 // unicode/utf8/utf8.gofunc RuneCountInString(s string) (n int) { for _ = range s { n++ } return} 很显然,这里不关心具体的index或value,同时,既然可以省略 value,为什么不能将 index 也省略。因此,加入了这种语法。这样,上面的代码变为: for range s { n++ } 详情: issue 6102 CL 104680043 2、os 包的 Symlink 函数支持 Windows 系统 一直以来,在 Windo...阅读全文

博文 2014-11-20 11:00:02 平凡之路

Go 程序在 macOS 上的打包功能

这篇文章简单地说明了如何在 macOS 上打包一个 Go 的程序,包括引用或者不引用外部资源。作为一个原生的 Cocoa 程序它是可以下载、安装和运行的。开发过程并不需要 XCode,cgo 或者其他特殊的库文件。 在此文章结尾处,你的 Go 程序将会被打包进一个 `.app` 文件,成为一个拖放安装的只读 DMG 文件。这也适用于其他非 Go 语言的程序。 关于这个端到端的解决方案的主题还有其他很多的指导文章,有的讲的比我想要做的内容多很多,有的又是采用不同的方式,而我想呈现给你的是如何将文件打包的过程。 **要求**:你必须要有一个 macOS。此方法不会在 Windows 或者 Linux 上生效。事实上,它也可能生效,但是你必须要手动或者借助某些疯狂的工具来制作和 macOS 相关的...阅读全文

为什么分布式一定要有Redis?

考虑到绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。所以我斗胆以 Redis 为题材,对 Redis 常见问题做一个总结,希望能够弥补大家的知识盲点。本文围绕以下几点进行阐述:为什么使用Redis使用Redis 有什么缺点单线程的Redis 为什么这么快Redis 的数据类型,以及每种数据类型的使用场景Redis 的过期策略以及内存淘汰机制Redis 和数据库双写一致性问题如何应对缓存穿透和缓存雪崩问题如何解决Redis 的并发竞争 Key 问题为什么使用 Redis我觉得在项目中使用 Redis,主要是从两个角度去考虑:性能和并发。当然,Redis 还具备可以做分布式锁等其他功能,...阅读全文

博文 2018-09-25 17:30:29 Javatiankenglu

golang 结构体

1. 定义 结构体是将另个或者多个任意类型的命名变量组合在一起的聚合数据类型。 2. 成员变量 访问控制机制 如果一个结构体的成员变量名称是首字母大些的,那么这个变量是可导出的(即在其他包可以访问到)。 一个结构体可以同时包含可导出和不可导出的成员变量 type A struct { Hour int //可导出 minute int //不可导出 } 限制 命名结构体类型s不可以定义一个拥有相同结构体类型s的成员变量,也就是一个聚合类型不可以包含它自己。但是s中可以定义一个s的指针类型,即*s。如下: type B struct { value int //Next B //错误 Next *B //正确 } 3. 结构体比较 如果结构体的所有成员变量都可以比较,那么这个结构体是可以比较的...阅读全文

博文 2018-06-30 18:34:44 百味纯净水

Golang学习(11)——path filepath包

Golang学习 - path/filepath 包-----------------------filepath 中的函数会根据不同平台做不同的处理,比如路径分隔符、卷名等。 -----------------------路径分隔符转换:const ( Separator = os.PathSeparator // 路径分隔符(分隔路径元素) ListSeparator = os.PathListSeparator // 路径列表分隔符(分隔多个路径))下面两个函数主要用于将 Windows 路径分隔符转换为 Linux 路径分隔符,处理完后再转换回去,只在 Windows 中有用,在 Linux 中没必要:// 将 path 中平台相关的路径分隔符转换为 '/'ToSlash(path ...阅读全文

博文 2017-02-10 10:15:54 1160636144

『Golang』跨平台TUI(基于文字的用户界面)库Terbox-Go文档翻译

文 package termbox import "github.com/nsf/termbox-go" termbox-go 是一个用于创建跨平台TUI(基于文本的用户界面)的库。 索引 Variables func CellBuffer() []Cell func Clear(fg, bg Attribute) error func Close() func Flush() error func HideCursor() func Init() error func Interrupt() func SetCell(x, y int, ch rune, fg, bg Attribute) func SetCursor(x, y int) func Size() (int, int) fu...阅读全文

博文 2015-02-10 03:00:01 sitemanager

请教一个字符编码转换的问题

使用go在windows下编程是,因go是UTF8的编码方式,但在用go读一些网页时,由于有些网页使用GBK的编码方式,这样,在存在转码的问题,找了很久,网上有这个第三方库,但怎么装都不成功,总有一些错,请大虾指点一下。我完全是个新手,谢谢! https://github.com/djimenez/iconv-go https://github.com/qiniu/iconv 以下是安装 https://github.com/qiniu/iconvr 的报错 C:\Users\sh>go get github.com/qiniu/iconv # github.com/qiniu/iconv C:/mingw64/bin/../lib/gcc/x86_64-w...阅读全文

How Stacks are Handled in Go

文章从C中的线程栈引入问题,讲述Go的处理方式。 第一阶段处理方式:Segmented stacks(分段栈); 现阶段处理方式:Stack copying 想了解 Goroutine 、 Stack 和 GC 内部实现的可以看看这篇文章以及相关文章 [1.How Stacks are Handled in Go](http://blog.cloudflare.com/how-stacks-are-handled-in-go/) [2.Contiguous stacks](https://docs.google.com/document/d/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ/pub) [3.Conve...阅读全文

golang 读写文件(一)

使用os的方式(会重写文件) package main import ( "fmt" "os" "time" ) func main() { f, err := os.OpenFile("/tmp/logs/test.log", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) //linux 路径 /*f, err := os.OpenFile("D:/tmp/logs/test.log", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)*/ //windows路径 if err != nil { fmt.Printf("open err%s", err) return } defer f.Close() //资源必须释放,函数...阅读全文

博文 2016-07-29 10:00:01 wtf0215-golang

Go 1 介绍 安装

1.介绍 什么是Go Golang。由谷歌创建的一种开源、编译和静态类型的编程语言。加入并发编程,为大数据、微服务、并发而生。 主要目标是使高可用性和可伸缩的web应用程序的开发变得简单易行。 特点:类型安全、内存安全;高并发;高效垃圾回收机制;为多核计算机提供性能提升方案;UTF-8编码支持;快速编译 用户:七牛云存储、知名beego用户、华为企业云、乐视云、京东、Bmob、联众游戏、淘宝等 项目:Docker、Kubernetes、Caddy、CockroachDB 2、安装 在Mac、Windows和Linux三个平台上都支持Golang。 Mac 注:这里只做说明,未操作。 https://golang.org/dl/下载osx安装程序。双击启动安装。按照提示,这应该在/usr/lo...阅读全文

mysql,sqlserver数据库单表数据过大的处理方式

经常混迹于技术社区,频繁看到这个题目,今天干脆在自己博客重复一遍解决办法: **针对mysql,sqlserver等关系型数据库单表数据过大的处理方式** **如果不是**[**阿里云**](https://2bit.cn/aliyunWeb?opengps284)**的**[**分布式数据库 DRDS**](https://2bit.cn/drds?opengps284)** 那种多机器集群方案的话: 先考虑表分区 ;然后考虑分表 ;然后考虑分库。** 这个题目是我所经历过的,我做的是GPS应用,早期版本就是选用的关系型数据库Sql Server。当时我选取的方案就是第一种:表分区。 表分区的优势是,如果表结构合理,可以不涉及到程序修改。也就是说,对程序来讲依然是单表读写的效果! 所有轨迹...阅读全文

博文 2019-04-01 13:53:54 jiyulin

Go语言-Windows开发环境搭建

由于实验室项目的需要,我今天开始学Go语言。 首先介绍Go语言开发环境的搭建,我的环境是在Windows下搭建,Go语言包推荐.msi安装包,我用的是go1.3.windows-386.msi ,原因很简单,.msi安装会自动配置环境变量,当然也可以用.zip包然后自己配置环境变量。IDE开发环境有两种选择:一是liteIDE,另一个是给eclipse下载goclipse插件。我选择的是liteIDE,下面我介绍下我今天搭建Go开发环境的小小经验总结。。。 1.下载Go语言安装包。 地址:https://code.google.com/p/go/downloads/list 我选择的是go1.3.windows-386.msi ,然后点击安装即可,一直下一步》下一步》(我默认安装在C盘(C:...阅读全文

擦亮币圈差异化产品服务的特色品牌

全球数字货币市场覆盖广泛,用户群体资源主要被各大服务平台包揽,每个地区的服务平台的较大的区别,所以打造目标产品才是整个项目的有效载体,选择有特色、有优势的产品才是企业挖掘吸纳市场用户的核心关键。首先产品基本上是根据自身的资源和优势来进行选择,这不完全是站在用户的角度,也不是市场需要什么企业就做什么。在这一点上企业必须抓准自己的优势,并且有效的扩大,再考虑市场是否需要这样的产品。​当下全球数字货币经济发展飞速,币圈正逐步涌现出了一些新的项目方,其中不乏一些知名项目。然而在这里我们发现数字货币行业作为金融行业,品牌建设却是一个任重而道远的过程。对于建设项目品牌的目的其实就是综合各种资源打造好产品,提高客户满意度,提高市场独有性,提高产品在市场的美誉度和知名度。在这个脱离了流量红利期的市场,品牌定...阅读全文

Golang正确的Error处理方式

package main import ( "fmt" "net/http" ) type Result struct { Error error Response *http.Response } func main() { checkStatus := func(done <-chan interface{}, urls ...string) <-chan Result { results := make(chan Result) go func() { defer close(results) for _, url := range urls { resp, err := http.Get(url) result := Result{ Error: err, Response: res...阅读全文

博文 2019-06-14 23:32:45 FredricZhu

多个程序监听同一端口 - socket端口复用技术

对于多个程序绑定同一个端口我们遇到最多的是(Port 80 was already in use),也就是说端口被占用,不能重复绑定,但是操作系统内核支持通过配置socket参数的方式来实现多个进程绑定同一个端口。 简单示例 package main import ( "context" "golang.org/x/sys/windows" "net" "syscall" ) var listenConfig = net.ListenConfig{ Control: MyControl, } func MyControl(network, address string, c syscall.RawConn) error { return c.Control(func(fd uintptr) ...阅读全文

博文 2020-06-06 11:32:42 写个代码容易么

互融云数字货币永续合约交易系统开发

前几年比特币的崛起让数字货币这一概念走进了人们的视野,数字货币这一去中心化的新货币系统也在短短几年时间内凭借其特点席卷全球,而随着数字货币一起崛起的区块链技术也是水涨船高,对于数字货币和区块链可能很多人都是比较懵懂的状态,但是不少具有前瞻性思维的人已经在数字货币上吃到了甜头,这其中比较收人关注的就是数字货币交易系统。互融云推出的永续合约交易系统支持双向交易,多杠杆,多风险控制,风险管控分为警戒线,禁止开仓线,强平线,降低用户风险率;并且平台引入了用户和平台对赌,以及代理商推荐返佣机制,推动了平台用户的发展。互融云数字货币永续合约交易系介绍1)合约模型设计交易方式:市价交易、限价交易合约周期:无定时交割时间,用户可自由选择交割时间隔夜费设置:用户购买每超过24小时则会收取隔夜费合约单位:手/张...阅读全文

博文 2019-08-27 13:32:48 互融云软件

Golang的文件处理方式-常见的读写姿势

Golang的文件处理方式-常见的读写姿势 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 在 Golang 语言中,文件使用指向 os.File 类型的指针来表示的,也叫做文件句柄。注意,标准输入 os.Stdin 和标准输出 os.Stdout ,他们的类型都是 *os.File 哟。在任何计算机设备中,文件是都是必须的对象,而在 Web编程中,文件的操作一直是 Web程序员经常遇到的问题,文件操作在 Web应用中是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作。 一.文件的读取姿势 1 歌曲:我有一只小毛驴 2 歌手:碧瑶 3 专辑:《瑶谣摇》 4 发行时间:2014-03-18 5 词:付林 6 曲:付林 7 歌词: 8 我有一只小毛驴 9 我从...阅读全文

博文 2017-11-08 06:00:01 yinzhengjie

GO 文档启用

效果如下: 1. 进入 go 的安装路径 找到 godoc.exe 我的路径信息如下图所示: 不难看出 我的 godoc.exe 位于 : C:\Go\bin 右击 "godoc.exe" -> "发送到" -> 桌面快捷方式 (这样就在你的桌面上创建了一个 godoc.exe 的快捷方式) 了 右击 桌面上的 “godoc.exe - 快捷方式” -> 选择 "属性" ->选择 "快捷方式" 选项卡(默认就是这个选项卡) 在 "目标(T)" 处填入 下面的命令 C:\Windows\SysWOW64\cmd.exe /c start "Godoc Server http://localhost:6060" "C:\Go\bin\godoc.exe" -http=localhost:6060...阅读全文

博文 2017-05-09 04:00:22 痞子汤

从数据库导出大量数据的处理方式

需求:将商户订单或交易记录导出到文件中,便于分析文件格式:Type 1: xlsx office 2003: 数据行不能超过 65535行 office 2007 及以后: 数据量可以保持在 1 百万行左右 内存占用严重,效率低下Type 2: csv 效率高,格式简单,对大数字需要进行特殊的处理以防止格式改变 office 软件支持csv插件导出方式:一次性导出 内存占用严重,响应时间长分批导出 程序逻辑脚复杂,效率较高; 可以使用多协程的方式就行并发操作展示方式:直接从页面下载 用户需要等待,并可能长时间得不到响应,导致浏览器取消请求通过生成url以邮件的方式进行发送,并通过短信通知用户 减少用户无意义的一只空等待,利于一步并发操作,同时可正常通知用户结果和错误信息提...阅读全文

Go学习笔记之:变量

Go是静态类型语言,变量是有明确类型的。编译器会检查函数调用中,变量类型的正确性。 使用var关键字来定义变量。 Go 的基本类型有: bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的别名 rune // int32 的别名 代表一个Unicode码 float32 float64 complex64 complex128 看看下面的例子 package main import "fmt" func main() { // `var` 关键字用来定义一个或者多个变量 var a string = "initial" fmt.Println(a) // 你...阅读全文

msgpack在java和go中序列化的区别

结论: 对象(结构体)在不同语言环境下,使用msgpack序列化结果有不同 Go结构体,序列化后类似map java,类似Array 目前这个请客导致Golang的server 和 java的client 无法简单实用统一的对象(结构体)来进行通讯 比如Go server端定义: type UserStruct struct { Name string ID int32 } java 的客户端定义 public class UserStruct { public String Name; public int ID; } 不知道有没有方法能统一这2种编码方...阅读全文

博文 2015-05-12 20:00:05 咖啡伴侣

Golang 错误的error处理方式

package main import ( "fmt" "net/http" ) func main() { checkStatus := func(done <-chan interface{}, urls ...string) <-chan *http.Response { responses := make(chan *http.Response) go func() { defer close(responses) for _, url := range urls { resp, err := http.Get(url) if err != nil { fmt.Println(err) continue } select { case <-done: return case resp...阅读全文

博文 2019-06-14 23:32:46 FredricZhu

go程序panic导致core时的处理问题

如果我想go程序在产生panic导致程序core时,统一去刷新日志后程序再退出,要怎么实现呢? 之前c++程序是可以去捕捉core时产生的信号来进行这些处理,使用go也尝试使用这种方式,设置export GOTRACEBACK=crash的环境变量,并且捕捉信号进行处理,但是试了下会产生core文件,但是捕捉不到信号。 现在的处理方式是在所有的携程函数中定义一个defer 去进行这些刷日志操作,当携程panic导致core或者正常退出时都会去刷日志这个操作,基本也能满足需求,但是需要在每个携程里面写defer去干这个事情,感觉比较麻烦。 所以在这里请教下大神们有没有更好的处理方式,在程序core时去做一些特殊的操作,谢...阅读全文

go 处理zip解压时乱码问题

问题 go语言自带的zip包可以解压zip文件 然而,如果你用winrar压缩成zip后。再用go去解压会发现文件名称是乱码。 而当你使用一众国产压缩软件压缩后再解压却不是乱码。 原因 winrar压缩时,默认采用本地编码方式来进行压缩。 在中国,本地编码方式一般是GBK。 而我们知道go语言字符串都是utf-8格式的,所以有可能出现乱码的情况。 image.png 解决方案 判定文件名编码方式,如果为GBK则转换GBK=》utf-8 由上面图片我们知道如果flags字段11bit为为1则是utf-8编码。0位本地编码 代码 代码中要用到如下两个包 "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transf...阅读全文

博文 2019-06-21 21:32:41 丶赤水断

程序员垃圾代码分类指南

来源:纯洁的微笑ID:keeppuresmile作者:微笑很纯洁上一篇文章《程序员垃圾分类图鉴》和大家聊了聊程序员的垃圾分类,有的程序员直呼太真实,有的程序员觉得太讽刺,不应该给程序员进行这样的分类。其实每个行业都会存在各种各样糟糕的情况,娱乐性的分类会将问题放大,让我们能站出来用另一个视角来看看,什么类型的程序员是我们应该避免的。做为一名老程序员,谁还没有写过几行垃圾代码,我到现在还记得在第二家公司离职时,写的那段超过 600 行一个方法的代码,可以想象后面接手我工作的同事,看到那段代码是什么样的感受。那段代码已经过去了6年多,我现在仍然记得,可见有多痛。那 600 行代码真的巨复杂,嵌套了至少四个 for 循环,处理了思科 IP 话机最复杂的话费解析功能。为什么会出现这样的情况,因为时间...阅读全文

博文 2019-08-01 20:38:17 马哥小迷妹

hex和base32和base64的区别与联系

基本概念 hex也称为base16,意思是使用16个可见字符来表示一个二进制数组,编码后数据大小将翻倍,因为1个字符需要用2个可见字符来表示。 base32,意思是使用32个可见字符来表示一个二进制数组,编码后数据大小变成原来的8/5,也即5个字符用8个可见字符表示,但是最后如果不足8个字符,将用=来补充。 base64,意思是使用64个可见字符来表示一个二进制数组,编码后数据大小变成原来的4/3,也即3个字符用4个可见字符来表示。 用例 看个例子: package main import "fmt" import "encoding/hex" import "encoding/base32" import "encoding/base64" func main() { s := "hell...阅读全文

博文 2017-08-28 02:35:02 因心而来

Go MVC框架 WeMVC

WeMVC是一个用go语言开发的简单的高性能MVC框架。它有以下特色: 1. 路由采用 [https://github.com/julienschmidt/httprouter](https://github.com/julienschmidt/httprouter)的 算法并加以适当改进; 2. 特有的Action处理方式:Action方法名的处理采用[Http Method]+[Action Name]方式。例如程序中有个路由规则 wemvc.Route("/user/:action", User{}) 。当以GET方式访问http://localhost:8080/user/login时,路由器捕捉到HttpMethod是Get,Action是logi...阅读全文

Go-Maps

语法汇总 前面介绍的array、slice都是顺序性列表,本节的map则是无序的。 这个map和C/C++/Java的map一样,在Python中称为字典/dictionary。但Golang中map的用法更符合脚本语言的特点,和Python很像。 涉及的主要语法点: var the_map map[string]int the_map := make(map[string]int) the_map := map[string]int {key:value, ...} value, ok := the_map[key] 示例-基本用法 下面这个例子给出了map的声明方法。但通常并不这么使用,因为这种声明之后必须要调用make()初始化之后才可赋值,与其这样,不如直接:= make()这种方式...阅读全文

博文 2016-08-31 15:00:05 u013344915

Golang安装配置

1.下载安装 地址:https://golang.org/dl/ 1.1 linux版本下载: wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz --no-check-certificate tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz 2.工作目录和环境配置: GOROOT 是golang安装根目录 GOPATH 是工作目录 PATH会设置下 GOROOT和GOPATH bin目录 vim ~/.bash_profile export GOROOT=/usr/local/go export GOPATH=/root/workspace export...阅读全文

博文 2017-10-26 14:03:09 郭恩洲_OSC博客

Go语言 关于go error处理风格的一些讨论和个人观点(上)

创文章。转载请注明出处:server非业余研究-sunface 近期看谷歌go group里面有非常多讨论go error处理风格的问题,颇有启示。如今跟大家分享一下。首先请看一个提问: Hi folks, When I look at a lot of go code, I see the following pattern: //当我看了很多go代码后,我发现了下面模式 x, err := foo() if err != nil { return err } y, err := bar(x) if err != nil { return err } z, err := baz(y) if err != nil { return err } // do something w/ z ret...阅读全文

关于 Go1.11 module 和语义版本

关于 Go1.11 module 和语义版本 2018-11-18 把公司项目迁移到 Go1.11 的 module 了,这个过程中对于版本控制,依赖管理之类的事情有了更加深入的了解。 本来懒得写东西,有同事说起,“我们从 glide 到 dep,一直到现在切换到 module 了,为什么项目的依赖还是很难用”,所以我觉得还是有必要写一写。让更多的人理解 go module 以及语义版本,还是有意义的。 包是一个固定的路径,而包的代码是会动态的变化的。如果今天 import 一个包可以编译过,明天那个包升级一下,项目就挂了,肯定是不能忍的。过去的一个做法,我们把所有的依赖都放进 vendor 里面,就不受外部包的升级之类的影响了。 仅仅是代码拷到 vendor 不行,需要知道使用的是哪个版本...阅读全文

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

一篇搞b站的文章

## 一篇搞b站的文章 ### `csrf`攻击简述: * `CSRF`(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:`CSRF/XSRF` * 你这可以这么理解`CSRF`攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。 * 具体原理就不详细解释了推荐一篇文章:[浅谈CSRF攻击方式](https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html) * 了解过`csrf`攻击, 我们应该明白, 所谓的`csrf`攻击就是: * 你在你的常用网站登录了 * 此时被`xxx`恶意网站的连接吸引, 访问`xxx`恶...阅读全文

博文 2020-05-14 15:39:20 loop_0

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

golang channel 关闭方式

golang channel 关闭方式 package main import ( "fmt" "strconv" ) func publishTask(c chan string, count int) { for i := 1; i <= count; i++ { taskName := "task: " + strconv.Itoa(i) c <- taskName //publish a new task } close(c) } func receiveTask(c chan string) { closed := false for { if closed { return } fmt.Println("Waiting for a new task ...") select { ...阅读全文

博文 2018-08-28 17:38:19 夜空一起砍猩猩

配置 Sia 开发环境—— Windows 篇

1、安装Go语言编译器和 GitHub 客户端 下载 32 位 Go 语言安装包 go1.8.3.windows-386.msi (根据实际也可下载 64 位安装包 go1.8.3.windows-amd64.msi). 安装过程没有什么特别之处, 一路单击下一步即可完成安装. GitHub 的 Windows 客户端要到 desktop.github.com 页面下载, 运行安装包程序时会在线下载微软的.NetFramework4.5, 比较费时间, 有时候还会莫名其妙被和谐, 如果下载失败就需要多运行几次, 一般可以成功. 安装完毕之后, 桌面出现两个新的快捷方式, 我们手动打开如图所示的这个名为 Git Shell 的快捷方式. 双击此图标打开一个cmd窗口 2、 步骤2.1: 打开G...阅读全文

博文 2017-07-04 08:06:39 阿群1986

Golang 字符串拼接

字符串拼接应该在编程过程中比较常用的操作了,在Go语言中对字符串的拼接有多种处理方式,以下通过实例来一一讲解 +号拼接 这种应该是最直接最简单的方式了。 func StringPlus() string { var s string s = "社会主义核心价值观的基本内容:" s += "富强、民主、文明、和谐,是我国社会主义现代化国家的建设目标;" s += "自由、平等、公正、法治,是对美好社会的生动表述;" s += "爱国、敬业、诚信、友善”,是公民基本道德规范。" return s } 运行go test -bench=. -benchmem 查看性能输出如下: BenchmarkStringPlus-8 5000000 251 ns/op 640 B/op 3 allocs/op...阅读全文

博文 2019-04-03 20:34:39 柳浪闻笛

Golang 变量内存模型

----------------- *Golang 变量在内存的形式* ----------------- int uint 在不同系统不同编译器有不同表现, *gc* 、 *gccgo* 的实现是在 64 位系统下,int uint 为 64 位,而 32 位系统为 32 位。 类似的,指针长度在 64 位系统为 8 字节,32 位系统为 4 字节。 数组、结构体中数据在内存中的紧密相连的。 ----- *字符串* ----- type stringStruct struct { str unsafe . Pointer len int } 字符串使用 16 字节长的数据结构表示,包含一个指向字符串存储数据的指针和一个长度数据。采用字符串切片生成新的字符串的时候不会涉及到内存的分配和复制操...阅读全文

博文 2018-02-27 15:05:19 刘曦光