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

Python面试宝典(一)

Python基础篇 1. 为什么学习Python? 2. 通过什么途径学习的Python? 3. Python和Java、PHP、C、C#、C++等其他语言的对比? 4. 简述解释型和编译型编程语言? 5. Python解释器种类以及特点? 6. 位和字节的关系? 7. b、B、KB、MB、GB 的关系? 8. 请至少列举5个 PEP8 规范(越多越好)。 9. 通过代码实现如下转换: 二进制转换成十进制:v = “0b1111011”
 十进制转换成二进制:v = 18
 八进制转换成十进制:v = “011”
 十进制转换成八进制:v = 30
 十六进制转换成十进制:v = “0x12”
 ...阅读全文

Protobuf-3.6.1 安装及golang使用

写在前面 protobuf是Google开发的一种数据描述语言,能够将结构化的数据序列化,可用于数据存储,通信协议等方面,官方版本支持 Go, C++, Java, Python,社区版本支持更多语言. 相对于JSON和XML具有以下优点: 体积小: 消息大小只需要XML的1/10 ~ 1⁄3 速度快: 解析速度比XML快20 ~ 100倍 集成度高: 使用Protobuf的编译器,可以生成更容易在编程中使用的数据访问代码 更好的兼容性: Protobuf设计的一个原则就是要能够很好地向下或向上兼容 安装 1.从 https://github.com/google/protobuf/releases 获取 Protobuf 编译器 protoc wget https://github.com...阅读全文

用golang实现json序列化,避免输出null

最近开发过程遇到一个go序列化的问题, 前端要求数据返回 { "user":"zhangsan", "role":[ {"name":"管理员"},{"name":"观察者"} ] } go中的数据结构是这样的 type Role struct{ Name string `json:"name"` } type Info { User string `json:"user"` Role []Role `json:"role"` } data,_:=json.Marshal(&info{User:"zhangsan"}) fmt.Println(string(data)) 如果info.Role没有数据时,因为go的json标准库会将空切片、空指针返回null,实际返回给前端的数据是这样的 {...阅读全文

博文 2020-03-25 12:32:42 悟道人

Protocol Buffer入门简介

一、Protocol buffers简述 特点 Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data. 语言中立,平台中立 序列化结构化数据 protocol核心学习点 protocol buffer 语法https://developers.google.com/protocol-buffers/docs/proto proto3语法https://developers.google.com/protocol-buffers/docs/proto3 buffer如何进行序列化以及反序列化https://developers....阅读全文

博文 2018-12-20 17:34:47 dreamguys

程序员过关斩将--你的面向接口编程一定对吗?

妹子开始抱怨起来 业务背景 妹子的游戏是个对战类的游戏,其中有一个玩家的概念,玩家可以攻击,这个业务正是妹子开始挠头的起点 第一次需求 产品经理:玩家有很多属性,例如:身高,性别 blalalala ,玩家可以攻击其他玩家。 YY妹子写程序也是很利索,一天就把程序搞定了,而且还抽象出一个palyer的基类出来,堪称高级程序员必备技能。 //玩家的基础抽象类 abstract class Player { public string Name { get; set; } //. //. //. //玩家的攻击 public abstract void Attack(); } //真实玩家 class PersonPlayer : Player { public override void At...阅读全文

golang json 包简单分析

首先上代码: func main() { b := true a1, _ := json.Marshal(b) a2, _ := Marshal(b) fmt.Println(string(a1)) fmt.Println(string(a2)) } 输出: true true 以最简单的单个bool 类型的序列化为例,我们来搞清楚json 包里面的调用栈如下: 从入口出发,第一个方法是: func Marshal(v interface{}) ([]byte, error) { e := &encodeState{} err := e.marshal(v) if err != nil { return nil, err } return e.Bytes(), nil } 这里没有什么特殊,...阅读全文

博文 2015-09-25 03:00:00 bnbqian

Go Module 工程化实践(三):工程实践篇

3. 工程实践篇 如何实现企业内项目的Go Module工程化迁移? 以本人以往所在公司的实际现状作为样例,说明具体的Go Module工程化迁移过程。 原有Go项目均采用单一vendor的模式进行依赖控制,即企业内所有Go项目的第三方依赖均引用该统一的vendor仓库,由专人专组独立维护。这样做的好处就是依赖包不会随实际开发者的版本变更而变更,企业内部维护一套相对稳定的版本,缺点就是缺少了依赖包的版本控制。 向Go Module工程化迁移的目标就是保持本地版本的稳定的同时兼顾版本控制功能。 3.1 modules仓库 在非Go Module项目中,所有项目的依赖包,使用了vendor仓库,在迁移到Go Module模式下,同样需要相应的modules仓库, 来保证本地开发包依赖版本的稳定。...阅读全文

博文 2019-05-18 16:34:37 JayL

Go语言简介

Go语言简介 - Go语言是由Google开发的一个开源项目,目的之一为了提高开发人员的编程效率。 Go语言简介 Go语言是由Google开发的一个开源项目,目的之一为了提高开发人员的编程效率。 Go语言语法灵活、简洁、清晰、高效。它对的并发特性可以方便地用于多核处理器和网络开发,同时灵活新颖的类型系统可以方便地编写模块化的系统。go可以快速编译, 同时具有垃圾内存自动回收功能,并且还支持运行时反射。Go是一个高效、静态类型, 但是又具有解释语言的动态类型特征的系统级语法。 下面是用go编写的"Hello, world"程序: package main import "fmt" func main() { fmt.Println("Hello,世界") } H:\mycodes\go>go ...阅读全文

golang 序列化、反序列化

// 序列化、反序列化 package main import ( "encoding/json" "fmt" ) type person struct { Name string `json:"name"` //强制字段名小写 Age int `json:"age"` } func main() { // 序列化 golang结构体 => JSON字符串 p1 := person{ Name:"小麦客", Age:666, } slice_of_byte, err := json.Marshal(p1) // json.Marshal(struct_obj) if err != nil{ fmt.Printf("当前JSON对象的内容为%s,查看结构体字段是否大写\n", string(s...阅读全文

博文 2020-04-08 07:32:47 小麦客

2017 APP市场的幸运与挑战,把握用户的真正要领在这里

之前,工信部发布的“信息通信领域17年趋势”中明确表示:4G用户将突破10亿大关,5G迈入新阶段。这对于互联网行业从业者来说,面对如此庞大的用户群既是一种幸运同时也是一种挑战。 幸运的是一款APP用户可以轻松地增加几十甚至上百万的用户量,挑战则是来自行业市场精品化的趋势以及需求的瞬息万变,需要有极快的更新迭代速度。 除了4G用户数暴增外,每人日均上网时长接近4小时,每部手机日均打开app20款的数据显示,移动互联深度用户越来越多,互联网与人们的生活也越来越密不可分。但是随着马太效应,人口红利的消失,如何在竞争激烈的环境里进一步提高用户体验,吸引留住用户,这一难题自然摆在了众多从业者的面前。 如何真正对味用户? 微设计愈发重要,人性化仍然是核心 事物总是处...阅读全文

Viper--方便好用的Golang 配置库

前言 本文主要是为读者介绍一个轻便好用的Golang配置库viper 正文 viper 的功能   viper 支持以下功能:   1. 支持Yaml、Json、 TOML、HCL 等格式的配置   2. 可以从文件、io、环境变量、command line中提取配置   3. 支持自动转换的类型解析   4. 可以远程从etcd中读取配置 示例代码 定义一个类型: type config struct { v *viper.Viper; } 用于测试的Yaml配置文件 config.yaml TimeStamp: "2018-07-16 10:23:19" Author: "WZP" PassWd: "Hello" Information: Name: "Harry" Age: "37" ...阅读全文

博文 2018-08-16 00:30:01 cnblogs-wangzhipeng

放弃使用 MongoDB (GoLang 微服务)

文档与附件存在多对多关联,用关系型数据库需要创建多个表,然后进行关联更新与查询,甚至是事务。所以考虑使用 mongodb,希望有更方便的操作方式。 过程中发现 mongodb 与 model、protobuff 对象整合起来非常别扭,同时 mongodb 的 golang 官方库 使用起来也是非常别扭。 mgo 还不错,可惜已经不再维护了。所以最终还是放弃在 golang 的微服务搭建中使用 mongodb。 详细问题 mongo 的 ID 是一个特殊对象 mongo 的主键类型是 primitive.ObjectID 实际使用时需要 string,所以需要来回转换类型 type Model struct { ID primitive.ObjectID `bson:"_id,omitempt...阅读全文

Go 每日一库之 sjson

简介 在上一篇文章中我们介绍了如何使用gjson快速读取 JSON 串中的值。为了内容的完整性,今天我们介绍一下如何使用sjson快速设置 JSON 串中的值。 快速使用 先安装: $ go get github.com/tidwall/sjson 后使用: package main import ( "fmt" "github.com/tidwall/sjson" ) const json = `{"name":{"first":"li","last":"dj"},"age":18}` func main() { value, _ := sjson.Set(json, "name.last", "dajun") fmt.Println(value) } 上面代码通过sjson.Set()将...阅读全文

json序列化和反序列化

序列化和反序列化 1、JSON的序列化 1.1序列化 struct、map、slice 对于json的序列化和反序列化,go的encoding/json 包提供了一些列的方法。 常用的比如 func Marshal(v interface{}) ([]byte, error) 序列化 func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) 同Marshal,并且可以格式化 第一个参数是要序列化的数据,第二个是每行的前缀,第三个是每行的缩进,比如MarshalIndent(map,""," ") json-iterator,有java和go两种实现 序列化练习: package main import (...阅读全文

博文 2019-06-26 10:03:24 杨旭

golang使用protobuf

简介 和http中常用的json协议一样,protobuf也是用来传输数据的,但是它使用二进制格式,传输效率更高。 安装 下载protoc二进制程序 下载链接 在windows上,选择protoc-3.7.0-rc-2-win64.zip 进行下载。 压缩包中有两个文件夹: 压缩包中文件夹.png 将bin目录下的protoc.exe拷贝到GOPATH/bin目录下,将include/目录下的google文件夹拷贝GOPATH/src目录下(只有使用protobuf的一些内置结构才需要用到该文件夹内的文件,这次并不会用到这个文件夹)。 安装protobuf的编译器插件protoc-gen-go protoc程序会调用protoc-gen-go,将.proto文件生成golang代码。可以使用...阅读全文

博文 2019-02-07 19:34:42 StormZhu

代码质量管控的四个阶段

-- 背景 -- 本文讨论的代码质量指的是代码本身的质量,包括复杂度、重复率、代码风格等要素。代码是团队的共同财产,代码质量是团队技术水平和管理水平的直接体现。 代码质量下降通常会自成因果,导致恶性循环: * 破窗效应:在烂代码上继续生产烂代码的心理负担小很多 * 传染性:烂代码传递着一种不在意质量,只看业务成果的负面信息,会伤害团队的技术热情和工作氛围,导致更多烂代码出现 本文会分析代码质量下降的内在机制,并分享在代码质量管控方面的一些实践经验。 --------- 熵增定律与代码质量 --------- 熵增定律告诉我们,一个封闭系统总是趋向于熵增,也就是系统的无序程度只会不断增加。 阅读全文

博文 2017-09-10 07:35:23 张鑫

DockOne技术分享(十三):十个问题带你了解Windows Docker

【编者的话】微软在5月份Build大会上的官方说法,说是这个夏天会放出Windows Server Container的测试版。也就是说,目前我们还无法看到Windows Docker的测试版本,无法直接上手测试。 微软在5月份Build大会上的官方说法,说是这个夏天会放出Windows Server Container的测试版。也就是说,目前我们还无法看到Windows Docker的测试版本,无法直接上手测试。接下来我就大家关心的十大问题进行介绍: 1. Windows Docker和Hyper-V有啥区别?Hyper-V和VMware/Xen/KVM等类似,都是硬件虚拟化,安全但笨重。 Windows Docker是OS虚拟化技术,具备一定的隔离能力,性能更好、容易移植。 两者不是互相...阅读全文

博文 2017-06-25 15:01:07 李颖杰

Go web 教程

GOPHER_AVATARS.jpg Go Web 新手教程 大家好,我叫谢伟,是一名程序员。 web 应用程序是一个各种编程语言一个非常流行的应用领域。 那么 web 后台开发涉及哪些知识呢? 模型设计:关系型数据库模型设计 SQL、ORM Restful API 设计 模型设计 web 后台开发一般是面向的业务开发,也就说开发是存在一个应用实体:比如,面向的是电商领域,比如面向的是数据领域等,比如社交领域等。 不同的领域,抽象出的模型各不相同,电商针对的多是商品、商铺、订单、物流等模型,社交针对的多是人、消息、群组、帖子等模型。 尽管市面是的数据库非常繁多,不同的应用场景选择不同的数据库,但关系型数据库依然是中小型企业的主流选择,关系型数据库对数据的组织非常友好。 能够快速的适用业务场景...阅读全文

博文 2019-06-21 01:32:41 谢小路

PHP之剑走偏锋的DeepCopy

php的深拷贝和浅拷贝问题,普通变量对象的赋值 = 是深拷贝,& 是浅拷贝。 $a = 1; $b = $a; $b = 2; $c = &$b; $c = 3; echo $a . PHP_EOL; echo $b . PHP_EOL; echo $c . PHP_EOL; 输出结果: 1 3 3 类对象的拷贝问题就得看下php版本了。php4时类对象的赋值=就是一次深拷贝。php5时类对象的赋值=就是一次浅拷贝。下面的代码是在php5.6.29的环境上运行的 arg = $arg; } public f...阅读全文

博文 2017-08-19 15:06:57 ieasy_tm

Go语言免费入门视频教程:Redis介绍安装和使用

###### @author:Davie ###### 版权所有:北京千锋互联科技有限公司 ### Redis的操作和使用 在安装好redis以后,我们这里给大家讲一下redis操作的一些知识。 Redis支持的数据类型:**string**,**hash**,**list**,**set**,**sorted set** 我们来练习一下redis的使用: - **字符串String:**string类型是redis最基本的类型,一个key对应一个value。redis的string可以包含任何数据,比如jpg图片,或者序列化的对象,都可以存储。string类型最大的能够存储512MB。 1)存储String操作:**set key value** 2)获取String操作:**get ke...阅读全文

protobuf 指南

简介 安装 语言定义 特殊指令 定义服务 JSON 支持 选项 生成代码 基础类型 更新 message Golang 下使用 参考 简介 Protocol Buffers 是 google 出品的一种数据交换格式, 缩写为 protobuf. 主要介绍 proto3 版本和 Golang 下的使用. 安装 protobuf 分为编译器和运行时两部分. 编译器直接使用预编译的二进制文件即可,可以从 releases 上下载. protobuf 运行时就是不同语言对应的库, 以 Golang 为例: go get github.com/golang/protobuf/protoc-gen-go 语言定义 protobuf 现在有两个版本, proto2 和 proto3. 本着学新不学旧的原则...阅读全文

博文 2019-11-19 12:32:41 帅气猫咪

论某教育机构考试系统设计

前言 近期在做一套答题系统,参考了某教育机构的设计。本章跟大家聊聊考试系统中的核心 - 如何考试? 简单点说,所谓考试系统就是答题系统,通过答题完成进行判分后返回其答题结果即完成整个流程。 当然过程中有些数据需要存储,有些则可在后期查询计算(个人理解),如有误导请速喷 如上图所示,一套试卷有N道试题,每道试题又是由题干与选项、答案组成,这样才汇聚了完整的一套答题(考试)系统。 试卷 一次考试(问卷)则使用一套试卷,考试(问卷)与考试则为一对一的关系,而试卷与考试(问卷)则是多对多的关系 CREATE TABLE `company_paper` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) COLLA...阅读全文

博文 2018-10-29 15:35:09 CrazyCodes

golang中protocolbuff的使用

protocolbuff是Google推出的开源序列化协议,几乎支持市面上所有主流语言。用作服务器与服务器或者客户端与服务器的网络传输协议再合适不过了。简单写个demo。项目结构: ProtocolBuff ----Makefile ----src ----github.com/golang/protobuf ----main ----protocol 配置协议:protocol/protocol.proto package protocol; enum ItemType { USERITEM = 1; EQUIPMENT = 2; }; message ItemInfo { optional int32 ID = 1; optional int32 Type = 2; optional s...阅读全文

博文 2018-01-11 15:35:22 Cedrus

golang json 性能分析

Json 作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中。Go 语言里面原生支持了这种数据格式的序列化以及反序列化,内部使用反射机制实现,性能有点差,在高度依赖 json 解析的应用里,往往会成为性能瓶颈,好在已有很多第三方库帮我们解决了这个问题,但是这么多库,对于像我这种有选择困难症的人来说,到底要怎么选择呢,下面就给大家来一一分析一下 ffjson go get -u github.com/pquerna/ffjson 原生的库性能比较差的主要原因是使用了很多反射的机制,为了解决这个问题,ffjson 通过预编译生成代码,类型的判断在预编译阶段已经确定,避免了在运行时的反射 但也因此在编译前需要多一个步骤,需要先生成 ffjson 代码,生成代码只需...阅读全文

博文 2018-01-28 17:34:37 hatlonely

mac 下配置 protobuf golang插件 并使用

[TOC] 介绍 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准Protocol Buffers 是一种轻便高效的结构化数据存储格式 可以用于结构化数据串行化,或者说序列化。 它很适合做数据存储或 RPC 数据交换格式。 可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 支持语言很多,C++ java python php golang 等,支持列表 Language Source C++ (include C++ runtime and protoc) src Java java Python python Objective-C objectivec C# csharp JavaNan...阅读全文

博文 2017-03-05 19:35:29 泛原罪

【技术系列】浅谈GPU虚拟化技术(第一章)

摘要: GPU深度好文系列,阿里云技术专家分享 **第一章 GPU虚拟化发展史** GPU的虚拟化发展历程事实上与公有云市场和云计算应用场景的普及息息相关。如果在10年前谈起云计算,大部分人的反应是“不知所云“。但是随着云计算场景的普及,概念的深入人心,慢慢地大家都对云计算有一个较清晰的概念和实例化的理解。自然,随着应用场景从单一依赖CPU的计算单元的应用扩展到多种体系架构,异构计算场景的应用上来后,对GPU,FPGA,TPU等专业计算芯片也提出了虚拟化和上云的强烈要求。尤其是最近几年机器学习、深度学习等领域的快速发展,催生了异构计算场景搬迁上云的高潮。 那么这个异构计算应用场景的市场规模有多大呢?异构计算作为机器学习人工智能的计算载体,先来看看人工智能前景如何?(引用出...阅读全文

Docker - 小李飞刀般的虚拟化解决方案

Docker - 小李飞刀般的虚拟化解决方案 Docker 介绍 Docker 是一个可以让开发者、系统管理员创建、分发并最终运行应用程序的开放平台。它使用 Google 的 Go 语言开发,并在 Github 上开源。作为轻量级的操作系统虚拟化解决方案,Docker 现在受到了越来越多的关注和使用,特别是RedHat,Ubuntu以及Google 都宣布官方支持 Docker,更让 Docker 走上了快车道,吸引了非常多的开发者。 Docker 和 传统的虚拟机解决方案相比有哪些优势呢,可以看看官网的一张示意图: Docker 是基于 LXC 的,使用操作系统上的容器,所以提高了操作系统的复用程度,甚至可以在一台物理机上部署成百上千个 Docker 容器。当然,由于运行依赖于操作系统,D...阅读全文

博文 2017-02-10 13:43:46 Xiaohui Wang

golang中的接口

1. 什么是接口 概念:接口定义了一组方法,但是不包含这些方法的具体实现;它们是抽象的,接口不能包含变量。 接口的定义格式 type Namer interface { method1() return_type method2() return_type } 2. 一个接口的栗子 package main import "fmt" type Message interface { Send() } type user struct { name string score int } func (u *user) Send() { fmt.Println("hi", u.name, "this is your ", u.score) } func sendMessage(msg Messag...阅读全文

博文 2019-04-05 02:34:39 孤风追影

DockOne微信分享(一二六):Kubernetes在微服务化游戏中的探索实践

【编者的话】随着Kubernetes的持续火热,那在线游戏领域又将如何使用,又将碰到哪些问题,以及带来哪些价值? 本次分享将为大家介绍微服务化架构游戏领域中,Kubernetes支撑技术方案选型,功能优化以及实践过程中的一些思考。 【3 天烧脑式容器存储网络训练营 | 深圳站】本次培训以容器存储和网络为主题,包括:Docker Plugin、Docker storage driver、Docker Volume Pulgin、Kubernetes Storage机制、容器网络实现原理和模型、Docker网络实现、网络插件、Calico、Contiv Netplugin、开源企业级镜像仓库Harbor原理及实现等。 微服务化游戏容器化探索随着Docker技术在近几年的快速发展,国内外掀起了一股...阅读全文

博文 2017-06-25 08:25:54 DarkForces.

基础设施服务的微服务化

这篇文章是根据我在SFDC(SegmentFault Developer Conference)大会上的分享整理而成。 今天我给大家分享的题目是『基础设施服务的微服务化』。微服务这一两年非常火,今天的服务器端的分享主题应该至少90%和微服务相关。同时你会发现,云,容器等技术的发展都是在给微服务铺路,因为用户本质上需要的是服务,不是资源。但大多数和微服务相关的讨论都是分析业务应用如何微服务化,如何远程调用,如何服务治理,谈论基础设施服务的却很少,我们今天来聊聊这个。 讨论微服务,遇到的第一个问题就是多微的服务才能叫微服务呢?是否有个标准,比如多少行代码,多少个方法,多少个接口? 我们来看看微服务这个概念的最早定义: 我们不用全部仔细看完,只需看看我标出来的几个关键词: small servic...阅读全文

博文 2017-02-09 19:55:57 jolestar

开源 | Service Mesh 数据平面 SOFAMosn 深层揭秘

本文作者:朵晓东,花名奕杉,蚂蚁金服高级技术专家,专注云计算技术及产品。Apache Kylin 创始团队核心成员,蚂蚁金融云 PaaS 创始团队核心成员,Antstack 网络产品负责人,SOFAMesh 创始团队核心成员。 本文是基于作者在 Service Mesh Meetup #2 北京的主题分享《蚂蚁金服 Service Mesh 数据平面 SOFAMosn 深层解密》部分内容所整理,完整内容见文末的直播回放。 前言今天给大家带来的分享内容是蚂蚁金服 Service Mesh 数据平面 SOFAMosn 深层揭秘。承接小剑老师在Service Mesh Meetup #1杭州的主题《大规模微服务架构下的 Service Mesh 探索之路》对 SOFAMosn 的分享,本次聚焦在数...阅读全文

博文 2019-01-15 15:34:44 金融级分布式架构

云计算开发者必会的虚拟化技术入门

课程介绍 本章主要讲解云计算技术的核心技术之一虚拟化技术,课程首先说明了虚拟化技术的主要作用以及常见实现方法,并针对硬件中常用的虚拟化技术(CPU、内存、IO)进行详细的讲解,最后还针对目前流行的开源虚拟化项目进行说明,讲解其出现的漏洞以及阿里云是怎样完成漏洞分析和处理的。 讲师介绍: 张献涛,阿里云资深专家,现主导阿里云ECS虚拟化架构的设计与研发工作。 课程目标 • 学习掌握云计算技术的核心技术之虚拟化技术。 适合人群 • 云计算开发者 课时列表 • 课时1:虚拟化技术应用:弹性计算 • 课时2:虚拟化技术概述 • 课时3:CPU虚拟化技术 • 课时4:内存虚拟化技术 • 课时5:IO虚拟化技术 • ...阅读全文

效仿 Golang 中的枚举类型

在这篇博文中我们看到使用 `go generate` 和遍历抽象语法树来生成强大的枚举类型。 博文的结果是一个生成枚举类型的客户端。[全部代码](https://github.com/steinfletcher/gonum) 都可以在 Github 上面找到。 ## Go 惯用技巧 Go 并没有对枚举类型提供一流的支持。模拟枚举类型的一种方法是,将一系列相关的常量定义为一个新的类型。Iota 可用于预定义连续自增的整形常量。我们可以像下面这样定义一个 `Color` 类型。 ```go package main import "fmt" type Color int const ( Red Color = iota // 0 Blue // 1 ) func main() { var b1 ...阅读全文

博文 2019-06-15 19:53:36 LSivan

大家都来讨论讨论平时在项目中遇到过什么样的坑?

抛砖引玉,先说一个我自己遇到的坑吧。 定义两个结构体: ```go type UserStep struct { Timestamp string `json:"time_stamp"` Steps int64 `json:"steps"` } type Server struct { UserStep Timestamp string `json:"time_stamp"` } func main() { us := UserStep{ Timestamp: "12", Steps: 23, } sv := Server{ Timestamp: "10", UserStep: us, } ...阅读全文

Protobuf-3.6.1 安装

简介 protobuf是Google开发的一种数据描述语言,能够将结构化的数据序列化,可用于数据存储,通信协议等方面,官方版本支持Go, C++, Java, Python,社区版本支持更多语言。相对于JSON和XML具有以下优点:体积小: 消息大小只需要XML的1/10 ~ 1⁄3速度快: 解析速度比XML快20 ~ 100倍集成度高: 使用Protobuf的编译器,可以生成更容易在编程中使用的数据访问代码更好的兼容性: Protobuf设计的一个原则就是要能够很好地向下或向上兼容 安装 1、从https://github.com/protocolbuffers/protobuf/releases获取Protobuf编译器protocwget https://github.com/prot...阅读全文

博文 2018-09-12 12:34:41 㗊??㵘燚㙓㗊

go语言与excel的序列化与反序列化(1)

很多时候,尤其是游戏开发中,策划往往将文档,数据等写入excel中,程序,需要通过各种方式解析excel,让程序可以读。 常见的方案有: 1.将excel转换为csv,逗号分割方式,程序通过split逗号按照特定格式进行转换。(功能不够强大,格式要求很严,无法灵活配置很多特殊的功能) 2.将excel转换为lua table。这是C++游戏开发的常用方式。 (无法通过c++对象序列化为excel) 3.将excel转换到数据库的table中。类似方案2,不同的是,这里是转换到数据库的表中。 (无法通过c++对象序列化为excel) 4.将excel转换为xml格式,然后通过如,java中simple_xml等支持xml序列化和反序列化的框架,进行序列化和反许序列化。 5.... 为什么要这样...阅读全文

博文 2015-06-17 23:03:07 eclipser1987

Golang序列化框架对决 - 为什么andyleap/gencode那么快?

我在github上创建了一个Go语言序列化/反序列化库的性能比较的项目gosercomp,用来比较常见的Go语言生态圈的序列化库。性能是以Go官方库提供的JSON/XML序列化库为基准,比较一下第三库能带来多大的性能提升。尽管一些第三方库会自动产生Struct的代码,我们还是都以下面的数据结构为例: 12345type ColorGroup struct { Id int `json:"id" xml:"id,attr" msg:"id"` Name string `json:"name" xml:"name" msg:"name"` Colors []string `json:"colors" xml:"colors" msg:"colors"`} 其中Colors是一个slice。我并没...阅读全文

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

Golang 爬取学院的安全测试题库

> 爬取学院安全教育测试题库 ## 前言 学院的安全教育测试题目好难,为了通过测试,也为了检验一下最近的学习成果,我尝试用 golang 爬取了整个安全题库,并保存成csv文件方便使用(轻松100分) ## 遇到的问题 * 寻找关键的 form-data * json 的反序列化 ## 实现 ```go package main import ( "encoding/csv" "encoding/json" "fmt" "io/ioutil" "net/http" "net/url" "os" "strconv" ) type ContentSlice struct { Content string `json:"content"` RightAnswer str...阅读全文

博文 2019-10-17 23:37:46 kqzh

windows go开发环境(3) IDE

git的命令行git bash用起来虽然很方便,但是有时不够直观。 git同时提供了git GUI工具。 windows下也可以使用更强大的sourcetree工具(同时支持gir,hg,svn,便于多项目查看)。 不过我对装.net framework总是心有芥蒂。能不用就不用了。 还可以在sublime里面安装sublimegit插件。这样就可以直接在sublime里面完成git status, git commit,git diff,git push等操作。 sublime3自带 go.sublime,支持go的语法高亮和补全、 还需要添加sublime下的go编译系统,在sublime下选择【工具菜单】,选择【编译系统】,继续选择【新编译系统】,在弹出的文件内写入如下代码: { "c...阅读全文

博文 2016-08-24 11:00:02 laputa73

Golang json用法详解(一)

Golang json用法详解(一) 简介 json格式可以算我们日常最常用的序列化格式之一了,Go语言作为一个由Google开发,号称互联网的C语言的语言,自然也对JSON格式支持很好。但是Go语言是个强类型语言,对格式要求极其严格而JSON格式虽然也有类型,但是并不稳定,Go语言在解析来源为非强类型语言时比如PHP等序列化的JSON时,经常遇到一些问题诸如字段类型变化导致无法正常解析的情况,导致服务不稳定。所以本篇的主要目的 就是挖掘Golang解析json的绝大部分能力 比较优雅的解决解析json时存在的各种问题 深入一下Golang解析json的过程 Golang解析JSON之Tag篇 一个结构体正常序列化过后是什么样的呢? package main import ( "encodi...阅读全文

博文 2017-06-10 00:00:02 yangshiyu

详解varint编码原理

什么是Varint编码 Varint是一种使用一个或多个字节序列化整数的方法,会把整数编码为变长字节。对于32位整型数据经过Varint编码后需要1~5个字节,小的数字使用1个byte,大的数字使用5个bytes。64位整型数据编码后占用1~10个字节。在实际场景中小数字的使用率远远多于大数字,因此通过Varint编码对于大部分场景都可以起到很好的压缩效果。 编码原理 除了最后一个字节外,varint编码中的每个字节都设置了最高有效位(most significant bit - msb)–msb为1则表明后面的字节还是属于当前数据的,如果是0那么这是当前数据的最后一个字节数据。每个字节的低7位用于以7位为一组存储数字的二进制补码表示,最低有效组在前,或者叫最低有效字节在前。这表明varin...阅读全文

博文 2019-09-26 14:35:47 kevinyan

分享一个Vue.js 2 的全家桶系列教程

分享Vue.js的入门级全家桶系列教程: 1.vue.js 入门与提高: [http://xc.hubwiz.com/course/vue.js](http://xc.hubwiz.com/course/592ee9b2b343f27b0ae1ba99?affid=20180409studygolang) 2.vuex 2 入门与提高: [http://xc.hubwiz.com/course/vuex](http://xc.hubwiz.com/course/597d463fff52d0da7e3e397a?affid=20180409studygolang) 3.vue-router 入门与提高: [http://xc.hubwiz.com/course/vuerouter](http:...阅读全文

博文 2018-04-09 08:54:40 hubwiz

获得性能大幅提升的go程序优化实践,火焰图使用

先把结论列在前面: 1.Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。 2.on-cpu/off-cpu火焰图的使用是程序性能分析的利器,往往一针见血。虽然生成一张火焰图比较繁琐(尤其是off-cpu图),但绝对值得拥有! 之前一直使用Logstash作为日志文件采集客户端程序。Logstash功能强大,有丰富的数据处理插件及很好的扩展能力,但由于使用JRuby实现,性能堪忧。而Filebeat是后来出现的一个用go语言实现的,更轻量级的日志文件采集客户端。性能不错、资源占用少,但几乎没有任何解析处理能力。通常的使用场景是使用Filebeat采集到Logsta...阅读全文

博文 2017-08-24 06:31:03 a64180190

3小时搞定数据可视化大屏,升职加薪有望了

Apsara Clouder大数据专项技能认证:使用DataV制作实时销售数据可视化大屏 该认证帮助数据分析师进行数据可视化中的大屏制作,讲解了包括制作的方法、设计原则等基础知识,并提供一个微项目,使用数加的DataV基于ABC公司的经营数据,快速构建一个高质量的实时销售大屏,服务于企业的高层决策、数据分析和业务监控。 认证流程 1购买认证 2学习课程/在线实验 3在线考试 4领取电子证书 课程学习 01 数据可视化介绍 通过学习,可以了解数据可视化的概念、分类及相关的案例。 免费试听 02 DataV介绍 通过学习,可以了解阿里云数据可视化工具DataV功能及特性。 免费试听 03 DataV基本操作...阅读全文

Golang学习笔记之日志log、zap

一、log日志包 log支持并发操作。其结构定义如下: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write at beginning of each line // ⽇志⾏前缀 flag int // properties // ⽇志打印格式标志,⽤于指定每⾏⽇志的打印格式 out io.Writer // destination for output // ⽤于指定⽇志输出位置,理论上可以是任务地⽅,只要实现了io.Writer接⼝就⾏ buf []byte // for accumulating...阅读全文

博文 2018-12-18 20:34:42 学生黄哲

25.蛤蟆笔记go语言——PostgrelSQL数据库使用

25.蛤蟆笔记go语言——PostgrelSQL数据库使用 下载地址:https://www.postgresql.org/download/ 此处以WINDOWS版本为例。 下载后双击安装。 postgresql-9.5.3-1-windows-x64.exe 安装过程输入密码和端口号。 使用 安装完毕后,有一个phAdmin图形化工具如下图1: 命令行管理 安装完毕后,自带命令行管理,如下图2 创建数据库 test: #create database test; 切换数据 #\c test 链接到数据库test 创建用户: create user astaxie with password 'astaxie'; 登录数据库,赋值: grant all privileges on user...阅读全文

博文 2016-06-28 00:00:01 notbaron

GO 语言操作 redis 数据库

redis数据库 是一种高性能的Key-Value数据库 NoSQL数据库 缓存型数据库 key-value型数据库 错误的说法非关系型数据库 1.redis介绍 1.1NoSQL:一类新出现的数据库(not only sql) 泛指缓存型的数据库 不支持SQL语法 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式 NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景 NoSQL中的产品种类相当多: Redis Mongodb Hbase hadoop Cassandra hadoop 1.2 NoSQL和SQL数据库的比较: 适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之 事务...阅读全文

博文 2020-03-27 22:33:14 xjtuhit

【Go】优雅的读取http请求或响应的数据-续

文链接:https://blog.thinkeridea.com/... 之前发布 【Go】优雅的读取http请求或响应的数据 文章,网友 “wxe” 咨询:“优化前后的请求耗时变化有多大”,之前只分析了内存分配,这篇文章用单元测试的方式分析优化前后的耗时情况,本文源码。 非常感谢 “wxe” 网友的提问,让我在测试过程中发现一个 json 序列化的问题。 之前我们优化了两个部分,json 与 ioutil.ReadAll, 先对比 ioutil.ReadAll, 这里测试的代码分成两个部分做对比,一部分单纯对比 ioutil.ReadAll 和 io.Copy + sync.Pool,另一部分增加 jsoniter.Unmarshal 来延迟 pool.Put(buffer) 的执行, 源...阅读全文

博文 2019-02-01 21:34:43 thinkeridea

特殊字符的json序列化

先来看一段golang package main import ( "encoding/json" "fmt" ) func main() { data := map[string]string{ "str0": "Hello, world", "str1": "<", "str2": ">", "str3": "&", } jsonStr, _ := json.Marshal(data) fmt.Println(string(jsonStr)) } 输出结果 {"str0":"Hello, world","str1":"\u003c","str2":"\u003e","str3":"\u0026"} 先来段rust的 extern crate rustc_serialize; use ru...阅读全文

博文 2018-09-08 22:34:39 wu_sphinx

八、golang文本操作、json协议

一、终端读写 操作终端相关文件语句常量,go所有的都是接口 os.Stdin:标准输入 os.Stdout:标准输入,只要实现输出这个接口,打印到终端, os.Stderr:标准错误输出 os.OpenFile(“路径”,模式):打开文件 终端读写实例 package main import( “fmt” ) var ( firstName,lastName,s string I int f float32 input =”56.12/5212/GO” format =”%f /%d/%s” ) func main(){ fmt.Println(“please enter your full name”) //打印一行的输出 fmt.Scanln(&firstName,&lastName) ...阅读全文

博文 2017-12-28 22:00:04 pyrene