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

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

golang高性能日志库zap配置示例

golang高性能日志库zap配置示例 zap是uber开源的Go高性能日志库,gitlab地址 安装 go get -u go.uber.org/zap 请注意,zap仅支持两个最新的Go版本。 示例 简单示例 格式化输出 package main import ( "go.uber.org/zap" "time" ) func main() { // zap.NewDevelopment 格式化输出 logger, _ := zap.NewDevelopment() defer logger.Sync() logger.Info("无法获取网址", zap.String("url", "http://www.baidu.com"), zap.Int("attempt", 3), zap....阅读全文

博文 2019-01-02 19:34:47 阿甘__

Golang GBK与UTF-8互转

package main import ( "code.google.com/p/mahonia" "fmt" ) func main() { //"你好,世界!"的GBK编码 testBytes := []byte{0xC4, 0xE3, 0xBA, 0xC3, 0xA3, 0xAC, 0xCA, 0xC0, 0xBD, 0xE7, 0xA3, 0xA1} var testStr string utfStr := "你好,世界!" var dec mahonia.Decoder var enc mahonia.Encoder testStr = string(testBytes) dec = mahonia.NewDecoder("gbk") if ret, ok := dec.Conve...阅读全文

博文 2015-02-03 10:00:02 ____追梦人

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...阅读全文

golang读取文件编码转换问题

首先导入包 "code.google.com/p/mahonia" 可以通过此链接获得此包 https://code.google.com/p/mahonia/ 参考代码如下: package main import ( "bufio" "code.google.com/p/mahonia" "log" "os" "strings" "time" ) func main() { //创建日志文件 t := time.Now() filepath := "./log_" + strings.Replace(t.String()[:19], ":", "_", 3) + ".txt" file, err := os.OpenFile(filepath, os.O_CREATE, 0666) if...阅读全文

博文 2014-10-04 19:27:08 xlplbo

golang中文unicode编码

http://www.dotcoo.com/golang-unicode-encode golang在很多时候要对中文进行unicode编码,今天有兴趣就写了一个,golang太爽了今天写了不少文章了.呵呵 package main import ( "fmt" "strconv" ) func main() { rs := []rune("golang中文unicode编码") json := "" html := "" for _, r := range rs { rint := int(r) if rint < 128 { json += string(r) html += string(r) } else { json += "\\u"+strconv.FormatInt(int64...阅读全文

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

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

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

golang利用gob序列化struct对象保存到本地

golang可以通过json或gob来序列化struct对象,虽然json的序列化更为通用,但利用gob编码可以实现json所不能支持的struct的方法序列化,利用gob包序列化struct保存到本地也十分简单. gob包实现的序列化struct对象保存到本地 务必注意的是golang序列化有个小坑,就是struct里的字段必须要可导出也就是首字母大写 package main import ( "encoding/gob" "fmt" "os" ) type User struct { Id int Name string } func (this *User) Say() string { return this.Name + ` hello world ! ` } func main...阅读全文

博文 2015-04-22 03:00:00 reflectsky

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

测试一下golang的json序列化Marshal

func test_json() { x, _ := json.Marshal([]string{"aaa:123", "bbb:456"}) fmt.Println(x) var caps []string json.Unmarshal(x, &caps) fmt.Println(caps) } //输出结果 ------------------------------- [91 34 97 97 97 58 49 50 51 34 44 34 98 98 98 58 52 53 54 34 93] [aaa:123 bbb:456] //把每个字符都转成对应ascill数值 通过反射找到具体的编码器,此例子对应编码器为string func (e *encodeState) string...阅读全文

博文 2015-09-18 19:00:11 webyh

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

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...阅读全文

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

p12转PEM供golang APNS使用

package main import ( "crypto/tls" "fmt" ) func main() { //LoadX509KeyPair读取并分析一个公用/私有密钥对从一对文件。该文件必须包含PEM编码数据。 _, err := tls.LoadX509KeyPair("./cert_dist.pem", "./key_dist2.pem") fmt.Println(err) //X509KeyPair解析一个公共/私有密钥对从一对PEM编码数据。 // _, err = tls.X509KeyPair(privateKey, publicKey) // fmt.Println(err) } //一、通过P12生成临时文件cert.pem // openssl pkcs12 -c...阅读全文

博文 2015-03-19 11:00:01 liaojie

[Golang] base64加密与解密

首先解释以下什么是base64(来自百度百科): Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。 在golang里有base64库可以实现相关操作,我尝试实现了加密解密...阅读全文

博文 2016-08-07 17:00:00 vincentX

GO中怎么处理URL编码?

比如我有一串字符串格式的URL,例如下边这样: %5B%7B%22ip%22%3A%22119.90.49.95%22%2C%22port%22%3A%228074%22%7D%2C%7B%22ip%22%3A%22119.90.49.110%22%2C%22port%22%3A%228050%22%7D%2C%7B%22ip%22%3A%22119.90.49.92%22%2C%22port%22%3A%228057%22%7D%2C%7B%22ip%22%3A%22119.90.49.104%22%2C%22port%22%3A%228016%22%7D%2C%7B%22ip%22%3A%22119.90.49.104%22%2C%22port%22%3A%228017%22%7D%2...阅读全文

golang json []byte类型base64编码

golang json Marshal默认对[]byte类型进行base64编码处理,Unmarshal时也只能用[]byte类型接收才能还原。 代码示例: package main import ( "encoding/json" "log" ) type testa struct { X string Y []byte } type testb struct { X string Y interface{} } func main() { a := testa{X: "xtest", Y: []byte("ytest")} log.Println(a) b, _ := json.Marshal(a) log.Println(string(b)) var c testa var d tes...阅读全文

博文 2019-03-20 17:34:42 yhao917

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 json编码,解析

json通用的数据交换格式,刚想做个别的东西,就想到要用json交换数据,就先把json的编码和解析搞定.看了看文档,写了一个事例代码.如下: package main import ( "fmt" "encoding/json" ) func main() { // json encode j1 := make(map[string]interface{}) j1["name"] = "豆蔻" j1["url"] = "http://www.dotcoo.com/" js1, err := json.Marshal(j1) if err != nil { panic(err) } println(string(js1)) // json decode j2 := make(map[stri...阅读全文

博文 2014-10-06 06:04:32 DarkWingBoy

『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...阅读全文

golang mysql 字符串插入错误

Incorrect string value: '\xEF\xBF\xBD\xEF\xBF\xBD...' 报这个错,基本是编码问题,检查一下表的编码 show create table table_name; 比如问题就出在字符集 | gosignal | CREATE TABLE `gosignal` ( `id` int(11) DEFAULT NULL, `time` varchar(30) DEFAULT NULL, `IMSI` varchar(25) DEFAULT NULL, `IMEI` varchar(25) DEFAULT NULL, `duration` int(11) DEFAULT NULL, `startLAC` varchar(10) DEFAULT NULL...阅读全文

博文 2014-10-04 19:26:12 ggaaooppeennngg

【Go语言实战】字符编码GBK、UTF8转换

近期计划开发一个小说阅读APP,本意是学习golang开发,以及爬虫设计。 一般规范些的站点,会采用utf-8编码开发运行在浏览器上。然而,在我抓取的某些网站,却是采用的GBK编码,因此,在解析dom后,获取中文内容的时候,总是会出现一些编码问题,导致我并不能确认,解析到的内容,是不是就是我想要的,我期望的。 为了解决这个问题,我面向百度,面向goole编程,最终找到了一个可靠的解决办法,即goole的text库(golang.org/x/text),并把对应的方法做了简单的封装。 // transform GBK bytes to UTF-8 bytes func GbkToUtf8(str []byte) (b []byte, err error) { r := transform.Ne...阅读全文

博文 2019-05-20 18:34:41 故不忧_y

json编码,用map转换的问题。

go action 中一个例子,如下,转换的时候,为什么不能转换成map[string]string类型呢?确实就是这个类型啊 会报错,报错就是说不是这个类型,是map[string]interface{}类型,为什么是这个类型呢?劳烦哪位可以帮着解答一下,谢谢。 错误信息: > panic: interface conversion: interface {} is map[string]interface {}, not map[string]string interface{} 不是可以接受任何类型么?为什么提示这个错误呢? ```go // This sample program demonstrates how to decode a JSON string. ...阅读全文

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

windows下go编码转换问题

github上有两个package做编码转换,都是基于iconv,用到了cgo,在linux下没有问题,在windows下用,非常麻烦。采用mingw安装libiconv也不行,一直提示找不到libiconv方法。 最终找到一个官方实现(纯go实现): https://code.google.com/p/go/source/checkout?repo=text gbk转utf-8示例: func gbk2utf8(str byte[]) ([]byte, error) { return ioutil.ReadAll(transform.NewReader(bytes.NewReader(str), simplifiedchinese.GBK.NewDecoder())) ...阅读全文

博文 2014-10-04 19:26:11 程序员Jack

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

golang加载css和js

├── main.go ├── static │ ├── css │ │ └── main.css │ └── js │ └── main.js └── view └── index.html 若有如上目录结构 // main.go func main() { http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) // 启动静态文件服务 // ... }