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

JSON与Go

介绍 JSON(JavaScript Object Notation)是一种简单的数据交换格式。从语法上来说,它综合了JavaScript的对象(objects)和列表(lists)。通常用于在web后端和运行在浏览器中的JavaScript程序之间通信,不过也可以用在很多其他的地方。官方主页,json.org,提供了对标准的详尽说明。 使用json 包可以轻松地在Go程序中读写JSON数据 编码 通过函数Marshal编码JSON数据。 func Marshal(v interface{}) ([]byte, error) 给定Go的数据结构, Message, type Message struct { Name string Body string Time int64 } 以及Mes...阅读全文

博文 2014-11-21 22:00:00 zhjih123

【玩转Golang】 自定义json序列化对象时,非法字符错误原因

由于前台web页面传来的日期对象是这样的格式“2010-11-03 15:23:22”,所以我安装网上查来的办法,自定义包装了time.Time对象,实现自己的Marshal和UnMarshal方法 type DateTime struct { time.Time } const ctLayout = "2006-01-02 15:04:05" const ctLayout_nosec = "2006-01-02 15:04" const ctLayout_date = "2006-01-02" func (this *DateTime) UnmarshalJSON(b []byte) (err error) { if b[0] == '"' && b[len(b)-1] == '"' { ...阅读全文

博文 2014-12-30 22:00:01 dajianshi

golang 单向 channel

只写通道:chan<- T只读通道:<-chan T 即只可写入或只可读的channel,事实上 channel 只读或只写都没有意义,所谓的单向 channel 其实知识声明时用,比如func foo(ch chan<- int) <-chan int {...} chan<- int表示一个只可写入的 channel,<-chan int表示一个只可读取的 channel。上面这个函数约定了 foo 内只能从向 ch 中写入数据,返回只一个只能读取的 channel,虽然使用普通的 channel 也没有问题,但这样在方法声明时约定可以防止 channel 被滥用,这种预防机制发生再编译期间。如果后续代码里,向本来用于读channel里写入了数据,编译器会提示错误,这时就要仔细检查自己的...阅读全文

博文 2018-08-31 15:37:29 夜空一起砍猩猩

go1.11的module机制和dep/govendor机制问题

module机制和dep/govendor机制是否冲突? 自从go团队推出module机制后,go团队和dep社区发生了一些冲突,有一篇有名的争论《关于Go Module的争吵》,读后给人一种错觉,似乎module机制和dep/govendor机制是不相容的。但是仔细分析二者的运行机制,其实两者并无冲突,反而是互补性质的。 module机制由环境变量GO111MODULE控制,它有三个值:off、on、auto,默认值是auto。在auto模式下,在$GOPATH/src路径下build时,默认使用vendor、GOPATH导入第三方包,而在GOPATH之外编译时,默认使用go.mod设置导入项目。我们知道vendor机制只有在GOPATH路径之下才起作用,到了GOPATH之外就没用了。所以...阅读全文

博文 2018-08-26 11:34:54 从火星来

Go数据结构之栈

一、什么是栈​这是杭州地铁1号线线路图。大卫哥考考大家,地铁列车如何调头?我也不卖关子了,列车通常是用“人字轨道”来变换车道。​列车先从A轨道开进“人字轨道”里,再从B轨道开出。从A轨道开进去的时候1号车厢是车头,从B开出来的时候4号车厢就变成车头了。所以大家看到地铁前后各一个车头。“人字轨道”有个特点:先进后出,英文简写就是FILO,含义自己体会。计算机专家把“人字轨道”抽象出来,提出了一个叫“栈”的概念。​栈和“人字轨道”的特点是一样的FIFO,只不过把车厢换成了数据。接下来,看大卫哥把栈扒的底裤不剩。二、栈的结构​大卫哥把栈拆分成容器和链表两块,容器用结构体实现,链表用单链表,当然大家也可以用其他链表结构,甚至数组来实现。三、接口说明及实现​1、Init初始化栈,其实就是初始化里面的链...阅读全文

博文 2017-11-16 02:29:29 rhan-zz

用Go语言做产品半年的一些感觉

用Go语言做产品刚好半年,有一些感觉跟大家说道说道。 在使用Go之前,我常常想象,无法使用先进的Debug工具会对工作进度造成多么巨大的影响。甚至在Visual Studio的娇惯下认为,不能调试基本就无法正确的写出代码了。 由于我在Windows平台,能够支持Go语言调试的gdb老是无法工作,所以在这半年中,我一次都没有打过断点,也没有开启过一次单步跟踪。刚开 始我心里非常没底,只好老老实实为每一个方法写测试代码,每开发完一个功能之后就运行所有测试。这个方法其实也算是家喻户晓的了,但很奇怪,我在写C#的 时候并不会自觉地这样做。只有在一些非常特殊的部分会写部分测试代码。 事后我想了想,懒惰只是其中一个原因,还有一个原因是“编译速度”。众所周知,Go语言的编译速度是非常快的。平时看到这个消息...阅读全文

博文 2015-06-11 03:00:06 ShaYeBlog

goroutine之间通信问题

golang中的协程之间通信除了channel之外,对于main中派生的多个goroutine的通信问题,不知道高手是如何解决的。比如A通过goroutine并发了N个B协程,那么A和其中的某个B协程之间的通信如何实现? 多个B协程函数都是相同的,A和某个B如何标识和通信的问题,我一时想不出方法,求高手指点,谢...阅读全文

关于GO与FFmpeg结合的问题!

各位好,我想使用Go语言结合FFmpeg将视频格式进行转换,我不太想用命令的方式去搞。 请问有大家都是怎么做的?是可以结合ffmpeg编译好的模块实现吗? 我用命令行也发现有问题,如下: cmd := exec.Command("ffmpeg","-y","-i ", spath , "-vcodec copy","-acodec copy" ,dpath) 结果不行,一直在报错误,请问命令行大家如何使用的...阅读全文

在个人博客实现「小课」系统

程序员这个行业,是一个终身学习的行业,经常会有新技术出现。我是一个很爱学习的人,喜欢尝鲜。每次想去学习一项新技术的时候,总是苦于找不到合适的入门教程。于是有了想自己写个小课系统的想法:希望能通过写一系列的文章,组织成一门小课,帮助想学习某项技术的同学快速入门。 有了这个想法之后,我开始准备搭建小课平台,一开始想的是做一个前后端分离的网站,后端用 Go 写 API,前端用 vue 写页面。 使用 vue + ElementUI 搭建出来的第一个版本长这样: 写完第一个版本之后,仔细想了一下,如果要写好这个小课系统的话,我还得做好几件事: 写 API ,前后端进行数据交互 写 Markdown 编辑器,在线录入课程 做服务端渲染,做 SEO 优化 一想到这里,头开始有点大,第一个对外发布的小课系...阅读全文

博文 2020-04-16 10:36:55 艾逗笔

关于golang中use as value错误

今天写代码过程中突然报错了,百思不得其解,错误如下 报错代码 第一次遇到这个错误,于是上网搜了一下也没有找到解决。仔细阅读代码后发现initEs(str)这个方法没有设置返回值,而我在使用initES(str)时写了返回值。initEs(str)方法如下: initEST(str) 总结:每一个操蛋的错误,都有一个极其sb的失误造成的...阅读全文

博文 2019-03-17 18:34:42 贝塔船长

golang struct 的奇技淫巧

在使用golang变成的过程中,struct的使用频率非常高,基础的使用我们都会,但有的时候可能会接到一些特殊的需求,或者发现别人的代码读起来不那么顺畅。那是因为struct的一些“冷门”方式,我们不那么熟练。 接下来,就跟大家分享下,我最近用到的“生僻方法”: 结构体中的json是干什么用的? 定义一个结构体 type Tina struct{ appID string`json:"string"` } 这里的这个json可不是备注的意思,而是在使用http接口进行传输时,根据json标识的内容对结构体做解析。 在做项目的时候就发生一个case: { actionIDint`json:"actionType"` actionTypestring`json:"actionID"` } 报错:...阅读全文

博文 2019-10-18 00:32:52 aside section ._1OhGeD

go语言很给力呀

最近因为项目需要,所以写了一个id生成器,于是当时想为了省事就用go语言来写得了,于是花了大概半天的时间写了300多行码,完成之后开始测性能。一开始是在自己的虚拟机上测的,客户端是用php的,结果发现php在单进程环境下只能跑30个请求,这个结果其实也不意外,因为这根本就不是服务器的问题,而是php本身的性能不行,所以压力压不上去。于是用pcntl_fork出多个进程来,每个进程跑一些请求,最后在主进程里计算总的时间,结果发现1s最多处理1000-2000之间,并且随着并发数增多,性能下降很快。这个结果让人比较意外,原以为go语言的性能会好很多。 后来仔细想了想,突然想起来有个参数可以设置runtime.MAXPROC,用于设置可以使用的cpu数目。于是在设置了这个参数之后又开始测试,一开始...阅读全文

博文 2014-10-04 19:26:39 javatgo

01背包问题(完全背包,部分背包)golang实现

很经典的动态规划问题,具体思路这里就不列出了,网上太多资料了。想要详细理解的话可以去看背包九讲 这里分别列出,01背包,完全背包,部分背包 golang实现。 01背包 给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。 应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 从左往右,从上往下填表(example: 5表示重量,12表示价值) 1.png 代码and注释 dp[i][j] = max(dp[i-1][j], nums[i][1]+dp[i-1][j-nums[i][0]]) 仔细想清楚这一行 backpack.png 完全背包 给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi,每个物品都有无限多件...阅读全文

博文 2017-10-24 02:04:49 Tibbersshao

日记

放假第一天,手机上显示的是“06:47”,工作日叫不醒,周末起太早???然后还是磨蹭到9点起床,锅里是温的白粥,我说这是不是有点清淡,弟说你可以加点盐。我服。最后还是跑到隔壁镇的乐园面包买了个提子包,犹豫着要不要再买支维他奶,额还是隔壁美宜家买吧,你懂的。村口的东江大道真的有毒,每次过期或者中秋都会堵车,并不是车流大还是车祸而是道路施工,每年都是那个位置那个坑。今天还是不太想出门,在家继续学golang,看了一小时居然在沙发上睡着了,额头和背脊都是闷热的汗,屁股潮湿内裤紧贴着,赶紧开个空调回床上睡,这种迷迷糊糊慵懒的下午好想念了...阅读全文

博文 2018-09-22 23:34:43 徐E东

golang的sql.DB的一些注意事项及读写锁的总结

最近在写一个用于存储protobuf配置的配置管理服务,业务逻辑不难,2天就搞定,但是后续bug不少,也踩了很多坑,在这里记录下。 首先,一直以为golang内的sql模块是单链接的,所以一开始在每个goroutine内都open了一个DB,并写了一个连接池进行管理。后续发现是多此一举,白白写了好多代码。golang的sql模块自带连接池功能,在执行sql语句的时候才会分配连接,执行完毕后归还给连接池,所以假设用golang的sql模块,一个程序一个DB就行了。 既然有连接池的支持,那么也要注意千万不要泄露连接池的连接。假设你采用Query来执行查询语句,那么会返回一个sql.Rows结构,这个结构会占用一个连接,只有在遍历完才会自动关闭,所以最好是获得了Rows后执行一次Rows的Clos...阅读全文

go1.11的module机制和dep/govendor机制问题

##module机制和dep/govendor机制是否冲突? 自从go团队推出`module`机制后,go团队和dep社区发生了一些冲突,有一篇有名的争论《关于Go Module的争吵》, 读后给人一种错觉,似乎`module`机制和`dep/govendor`机制是不相容的。但是仔细分析二者的运行机制, 其实两者并无冲突,反而是互补性质的。 `module`机制由环境变量`GO111MODULE`控制,它有三个值:`off、on、auto`,默认值是`auto`。 在`auto`模式下,在`$GOPATH/src`路径下`build`时,默认使用`vendor`、`GOPATH`导入第三方包, 而在`GOPATH`之外编译时,默认使用`go.mod`设置导入项目。我们知道`vendor`机...阅读全文

博文 2018-08-26 21:58:42 fuhuizn

Go数据结构之栈

一、什么是栈 这是杭州地铁1号线线路图。大卫哥考考大家,地铁列车如何调头? 我也不卖关子了,列车通常是用“人字轨道”来变换车道。 列车先从A轨道开进“人字轨道”里,再从B轨道开出。从A轨道开进去的时候1号车厢是车头,从B开出来的时候4号车厢就变成车头了。所以大家看到地铁前后各一个车头。“人字轨道”有个特点:先进后出,英文简写就是FILO,含义自己体会。计算机专家把“人字轨道”抽象出来,提出了一个叫“栈”的概念。 栈和“人字轨道”的特点是一样的FIFO,只不过把车厢换成了数据。接下来,看大卫哥把栈扒的底裤不剩。 二、栈的结构 大卫哥把栈拆分成容器和链表两块,容器用结构体实现,链表用单链表,当然大家也可以用其他链表结构,甚至数组来实现。 三、接口说明及实现 1、Init 初始化栈,其实就是初始化...阅读全文

博文 2017-11-16 03:05:04 懒人记

Go语言学习笔记2——数组和Slice

在任何一门语言里,数组应该都是非常基础的类型了,使用率当然也应该是很高的。go不但提供了数组,而且还在数组这个类型之上加了一层包装,这个包装也就是slice。 go的数组变量(也就是数组名)是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言; C语言主要还是类型系统太弱了,因此很多的数据最终都退化为指针的方式来访问。 go的数组定义: var a [10]int var a = [10]int{0,1,2,3,4,5,6,7,8,9} var a = [...]int{0,1,2,3,4,5,6,7,8,9} var a = [2][2]int{[2]int{1,1}, [2]int{2,2}} var a = [2][2]int{{...阅读全文

博文 2014-10-09 16:00:05 Marcky

GitHub Now in Kubernetes!

如果你现在正在使用GitHub,那么,有没感觉到和前两天有什么不同呢?就在昨天,Github已经悄悄的完成了(可能是局部)用户流量到生产环境Kubernetes集群的切换。对,如果你运气足够好的话,也许就是其中一个。 这可不是简单的『又一个Kubernetes in Production』案例。作为全球最大的代码托管和编程社交网络,估值超过20亿美元的GitHub网站坐拥数千万用户和亿级的代码仓库,已然成为全球软件开发者每天赖以生存的光和土壤。GitHub将如此规模业务押注在Kubernetes上,无疑是对Kubernetes生态极大的鼓舞。 在GitHub工作的SRE Aaron昨天在Twitter上给好友,现任Google公司首席布道师的Kelsey发了一条推文透露了这个消息,作为Kub...阅读全文

database/sql包连接池解读

连接池是做网络应用经常用到的一个概念,可以缓存连接减少创建连接的损耗。那么在golang中应该如何做一个连接池,在这里会通过解读database/sql包的连接池实现来给自己一些参考和启发。首先,需要了解database/sql的基本原理和使用方法,请参考下面的链接仔细阅读:http://go-database-sql.org/overview.htm...阅读全文

写了8年的代码,做过的项目都下线了,程序员的意义在哪里!

01起因前几天项目交付上线,所以闲下来了。忽然想起来,自己业余接的活,有些项目已经不再运营了,所以想清理下域名解析。上去阿里云一看,总的大概有 15 个解析。这 15 个解析就意味着 15 个项目。这些项目都是我去谈的需求、写的文档、前后端开发、部署上线维护,整个项目几乎都是我一人完成的。想当初,很用心的去开发每一个项目;如今,这些项目只能一个个关闭。这真的使我很悲观:我花了那么多的时间精力,去做的事情,竟然如此的毫无意义。​02我想静静回首这 8 年,做过的大小项目,应该是有个大几十个吧(除了在公司的业务,也接了不少私活)。而有时候,在与人交谈时,当对方提出想看我开发过的一些线上的项目的时候,我竟会常常语塞,除了我近期正在做的项目,其余的,我想不起来,还有什么还在线上。即使近期正在做的项目...阅读全文

博文 2018-12-04 17:17:44 Javaspring12

Golang 生成Excel文件(.xlsx)

1、导入xlsx直接生成Excel: go get github.com/tealeg/xlsx 如果在get包时长时间没有反应,那可以直接从我的百度云下载 xlsx 包,之后直接放在你项目的 github.com 文件夹下就可以了 https://pan.baidu.com/s/1T-RsQ6lyP2bw330tD1svgQ package main import "github.com/tealeg/xlsx" func main() { file := xlsx.NewFile() sheet,err := file.AddSheet("sheet1") if err != nil { panic(err) } row := sheet.AddRow() row.SetHeightCM...阅读全文

博文 2019-08-09 20:33:00 LLL_小浪

【golang】wait,who am I

345唉,这是int类型吗?看着是~它有可能是345.0,可以简写为345.(没有看错,只是把0给简没有了)func main() { s := 345 var t int32 = 345 fmt.Println(s == t)}会出现什么呢?对了,会出现s == t (mismatched types int and int32),因为s := 345被golang编译器缺省赋予了int类型。func main() { s := 345 var t float = 345 fmt.Println(s == t)}会出现什么呢?想都别想了,因为golang的浮点只有float32和float64,哈哈哈哈哈哈~func main() { s := 345.0 var t float32 = ...阅读全文

博文 2017-02-10 11:05:21 qingkechina

go语言很给力呀

最近因为项目需要,所以写了一个id生成器,于是当时想为了省事就用go语言来写得了,于是花了大概半天的时间写了300多行码,完成之后开始测性能。一开始是在自己的虚拟机上测的,客户端是用php的,结果发现php在单进程环境下只能跑30个请求,这个结果其实也不意外,因为这根本就不是服务器的问题,而是php本身的性能不行,所以压力压不上去。于是用pcntl_fork出多个进程来,每个进程跑一些请求,最后在主进程里计算总的时间,结果发现1s最多处理1000-2000之间,并且随着并发数增多,性能下降很快。这个结果让人比较意外,原以为go语言的性能会好很多。 后来仔细想了想,突然想起来有个参数可以设置runtime.MAXPROC,用于设置可以使用的cpu数目。于是在设置了这个参数之后又开始测试,一开始...阅读全文

博文 2015-06-17 23:01:27 HopingWhite

golang的sql.DB的一些注意事项及读写锁的总结

最近在写一个用于存储protobuf配置的配置管理服务,业务逻辑不难,2天就搞定,但是后续bug不少,也踩了很多坑,在这里记录下。 首先,一直以为golang内的sql模块是单链接的,所以一开始在每个goroutine内都open了一个DB,并写了一个连接池进行管理。后续发现是多此一举,白白写了好多代码。golang的sql模块自带连接池功能,在执行sql语句的时候才会分配连接,执行完毕后归还给连接池,所以假设用golang的sql模块,一个程序一个DB就行了。 既然有连接池的支持,那么也要注意千万不要泄露连接池的连接。假设你采用Query来执行查询语句,那么会返回一个sql.Rows结构,这个结构会占用一个连接,只有在遍历完才会自动关闭,所以最好是获得了Rows后执行一次Rows的Clos...阅读全文

源码分析context的超时及关闭实现

前言: Golang的context的作用就不多说了,就是用来管理调用上下文的,控制一个请求的生命周期。golang的context库里有四个组件。 withCancel用来控制取消事件,withDeadline和withTimeout是控制超时,withValue可以传递一些key value。 // xiaorui.cc func WithCancel(parent Context) (ctx Context, cancel CancelFunc) func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) func WithTimeout(parent Context, timeout time...阅读全文

博文 2019-06-11 20:39:57 rfyiamcool

关于gorouitne

按照a tour of Go 中 Crawl 例程提示,改写了 Crawl 函数,但是只能找出一条 url,想不出原因,请教大家,谢谢。 ``` package main import ( "fmt" "sync" ) type Fetcher interface { // Fetch returns the body of URL and // a slice of URLs found on that page. Fetch(url string) (body string, urls []string, err error) } // Crawl uses fetcher to recursively craw...阅读全文

从那些我5年前就想做的事谈起

说来,估计每个人都有一堆想做却没做的事,甚至不仔细想都不记得自己当初立过哪些flag。 因为太多的flag最终都是不了了之,人本能的逃避,也不愿再提起了。 我突然再提起这个话题,到不是我立个flag改过自新了,只是最近翻读了下笑来老师的《自觉是门手艺》,对书中一段话颇有感触。 哪些是你5年前就想做但现在依然没开始做的事? 以5年为界,回想起来,我想要做却一直没做的事着实不少,如果只看编程这方面: 远的有 学python 专研算法/加强下数学 近的有 学linux 学vuejs 不一一列举,但自己这5年来也不是什么没学,5年前自己应该是只会C#,但后来陆续学会了js和golang,并有了相关的工作经验。 在编程这方面,我是更偏向于在工作中学习,单纯的为了学习而学或者研究,似乎真没有那么多耐心。...阅读全文

博文 2019-04-04 01:34:39 海之方

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

上篇文章介绍了Golang在不同系统下的安装,并完成了经典的Hello World案例。在这个过程中,我们用到了go run命令,它完成源码从编译到执行的整个过程。 今天来详细介绍下这个过程。简单理解,go run 可等价于 go build + 执行。 build命令简述 在Golang中,build过程主要由go build执行。它完成了源码的编译与可执行文件的生成。 go build接收参数为.go文件或目录,默认情况下编译当前目录下所有.go文件。在main包下执行会生成相应的可执行文件,在非main包下,它会做一些检查,生成的库文件放在缓存目录下,在工作目录下并无新文件生成。 新建hello案例 在正式介绍编译流程前,再重新演示下Hello World案例,新建hello.go文件...阅读全文

Linux下使用-static -lpthread静态编译出现段错误(Segmentation fault)

发自:https://blog.csdn.net/godmaycry/article/details/78718399最近在看golang,感觉go的静态编译思想很不错。于是准备把手头的几个项目静态编译一下,结果编译的时候没报任何警告及错误,一运行就报段错误(Segmentation fault)。gdb逐步调试,发现问题出在std::thread那里。仔细检查了下所有语法,没发现任何问题。关键是动态编译一切正常,加了-static静态编译就会出现这个问题。Google才发现这是一个bug,std::thread Segmentation fault static linking解决方案有两个:1.参数加上-Wl,--whole-archive -lpthread -Wl,--no-whol...阅读全文

博文 2020-05-29 11:34:13 liugensite

leetcode_355

Golang: 思路:设计推特,搬运我的题解 这里的代码依旧有着很大优化的空间,比如按时间排序上,可以维护一个堆;对于每一个用户,我们可以只保存他/她的最近十条推特 但是不太想写了,因为比较麻烦。。。 globalId:类似timestamp时间标记 follower:记录每个用户关注的用户列表 checkFollowed表示关注关系,用户A是否关注了用户B,key为“id id”的形式,应该是可以保证唯一性的 twitter存储每个用户发过的推,但是value存的是globalId,方便以后取出来 findtwitter存储的是所有用户发的推 注意,这套代码是不满足并行与分布式的要求的。。。 代码如下: type Twitter struct { globalId int follower...阅读全文

博文 2020-04-13 11:32:46 淳属虚构

leetcode_213

Golang: 思路:这题我个人感觉要复杂一些,难度在于首尾相连,并且,你需要考虑的更全面一些。当然,这题做完的时间复杂度100%,空间47%,但我不太想优化了。简单来说,有房子[1...n],通过打家劫舍1得出的最大值,我们需要做出判断:如果我们没抢n,那么这个最大值没有问题,如果我们抢了n,那么就需要去看下我们抢没抢1,如果也没抢1,那么没问题,但如果抢1了,那么这个最大值就需要修改了,为max([2....n],[1...n-1])。 代码如下: func rob(nums []int) int { if len(nums) == 0 { return 0 } if len(nums) == 1 { return nums[0] } if len(nums) == 2 { if num...阅读全文

博文 2020-02-22 15:32:50 淳属虚构