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

golang byte转string 字节数组转字符串的问题

golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上大部分都是这样转的(包括google上):string(p[:]),这个转完了是有问题的,我们再来看一下string这个结构体: struct String{ byte* str; intgo len;}; 这个结构体让我想起了nginx的string,他是这样定义的: typedef struct { size_t len; u_char *data;} ngx_str_t; golang里边 string的概念其实不是以前遇到\0结尾的概念了,他其实就是一块连续的内存,首地址+长度,上面那样...阅读全文

博文 2015-08-17 03:00:00 anjianliang

在go语言里使用thrift做远程通讯

一.准备和编写IDL thrift的介绍和安装见上文 thrift支持的数据类型 基本类型 bool: A boolean value (true or false) byte: An 8-bit signed integer i16: A 16-bit signed integer i32: A 32-bit signed integer i64: A 64-bit signed integer double: A 64-bit floating point number string: A text string encoded using UTF-8 encoding Struct 包含其他数据类型的结构体,与c语言的struct类同 Containers 容器 list set ma...阅读全文

博文 2014-10-04 19:26:21 ananclub

mac unity3d api获取不到问题

unity3d 安装了一个多月了,一直忙,也没时间了解,一个demo写了一个月了,还没搞完,哈哈。今天突然想起学习中遇到一个棘手的问题,api帮助文档获取不到。当时google了一下,是5.0的一个官方bug。unity里api文档查找策略是优先查找本地,本地找不到会访问官方api帮助文档。由于5.0的访问地址进行了调整,本地api文档路径没有变,导致无法获取本地文档,官方的路径也是错误的。下面贴出解决办法,本人是在macbook上操作的,所以windows要调整路径。 #####(一)查看unity帮助文档下载路径 unity>help>Scripting Reference ``` file:///Applications/Unity/Unity.app/Contents/...阅读全文

Go Exercise: Equivalent Binary Trees

package main import ( "fmt" "tour/tree" ) // Walk walks the tree t sending all values // from the tree to the channel ch. func Walk(t *tree.Tree, ch chan int) { if t.Left != nil { Walk(t.Left, ch) } ch<-t.Value if t.Right != nil { Walk(t.Right, ch) } } // Same determines whether the trees // t1 and t2 contain the same values. func Same(t1, t2 *tree...阅读全文

博文 2014-10-23 16:00:00 resouer

记一次算法练习

算法一直是自己的弱项 通过算法来学习语言吧 Java版: /** * 算法练习 1 * Created by Exile on 2017/5/25. * 1 N(N为偶数)个数字,把数字平分 N/2 组,使得每组的数字和相等。 */ public class ArithmeticTest1 { // 题目1偶数个数组 public static void main(String[] args) { int[] evenNumberArry = new int[]{1, 7, 2, 7, 6, 5, 2, 8, 3, 4}; int arryNum = evenNumberArry.length / 2; // 1 计算sum; int sum = 0; for (int i : evenNu...阅读全文

博文 2017-06-01 05:07:18 埃赛尔

2018-08-23

今天是整点写的23号的日记了终于赶上了进度我要跟懒癌和拖延症好好的斗一斗今天的账单还没有录入等下录好了今天早上喝的是自己煮的小米红枣粥哈哈哈还是挺好喝的没有放糖也是甜甜的据说这个对胃好之前本来是买来准备给那谁送个把月结果呢哎 不提了往事不堪回首今天估计她又有任务了往我们室跑了好多趟哎真心不想听到她声音不想看到她的脸我现在已经刻意的不去看她刻意的不去听她的声音希望她别太介意我也是想决断但是我现在因为买房考试这些问题不能离职买房这事这周六终于可以有个结果了成不成就看了想一想以后要背的房贷就心塞塞算了 先上车这个也不会亏了本来之前想追回来写两个人的名字结果呢造化弄人了一切都是没有缘分不去想不去问不去做感动自己的事情了加油做好自己做一个自己喜欢的人上午一杯黑咖啡提神下午一壶柠檬水+黑咖啡总之呢在公司...阅读全文

博文 2018-08-24 00:34:59 TheOne_WuX

“花庐”笔记本

早上临时接到一个紧急任务,弄了一个上午总算搞定,吃饭的时候有一些焦虑升起来,计划要做的事情还有好几件都没有收尾。下午的时候临时又有两个会议插入,但却更聚焦,把一些只需要花比较少的时间收尾的事情弄完,这样他们就不再占据我的大脑。临下班时,脑子终于被清空不少。 早上在小伙伴们的帮助下,终于把Golang的环境搭建起来,正式开始我的Go学习之旅。 一直有些舍不得买的“花庐笔记本”终于下单了,小伙伴不太理解,为什么花80块钱买一个笔记本,公司不是有免费的笔记本吗?对我来说,一个笔记本能给我带来一年的好心情也是好值得的一件事情。 小妹儿说,最近高老师做的新技术的那套东西后面需要寻找天使用户,这也是我们接下来的一段时间需要的东西。哈哈!怎么不管世事如何变化,最终的依然还是这几个人配合在一起。 晚上,庄请...阅读全文

博文 2019-01-23 01:34:41 guogegi_龚国静

Plan 9安装Go

I、安装python和mercurial(hg) 首先是在term中输入9fs sources, 然后cd到/n/sources/contrib下,参照Plan 9的contrib index,找到"From fgb's contrib"的python用户名。 % 9fs sources % /n/sources/contrib/fgb/root/rc/bin/contrib/install fgb/contrib % contrib/install -f bichued/python % contrib/install -f bichued/hg 或者将/n/sources/extra/python.iso.bz2拷到自己的目录下,然后 % bunzip2 python.iso.bz2 %...阅读全文

博文 2014-10-25 14:00:06 bonny95

go interface{}强制类型转化为其他类型

我想对golang封装一个切片过滤的方法 filter func Filter(arr []interface{}, fun fn ) []interface{}{ var result []interface{} if len(arr)==0 { result = make([]interface{},0) } else { for _,v := range arr { if fun(v) { result = append(result, v) } } } return result } 使用方法是传入任意类型的切片[]interface{},传入一个过滤的方法。 但是调用的时候就出现问题了 var list = []int{1,2,3,4,5} var list2 = Filter(l...阅读全文

博文 2019-04-03 10:34:49 louhangfei

Java、Scala、Go以相同方式实现快速排序代码量比较

在程序猿的世界,语言之争是个永恒的话题,在此,我想说:让争论来的更猛烈些吧。 在此,我要用相同的方式实现快速排序。首先,我们简单的回顾一下什么是快速排序。 快速排序: 快排的精髓在于”分治“。注意:这是两个方面,”分“讲的是利用所选的元素(往往是第一个元素,在此命名为Key),以Key为分水岭将列表分为:比Key元素大的和比Key元素小的两部分;”治“讲的是将分开的两部分以同样的方式(”分”的方式)继续排序,直至完全排完。如下图所示: 很显然,用“递归”的方式是很不错的。下面,每个语言用最最简洁的方式实现这个排序,然后比较一下代码量: 给出的需要排序的序列是:6、2、7、3、9、4、8、5 JAVA: private void setQuickSort(int[] array,int lef...阅读全文

博文 2016-03-04 16:00:00 i6448038

Go内存优化(一)— struct

理 关于Golang同一struct中field的书写顺序不同内存分配大小也会不同。主要原因如下:struct内field内存分配是以4B为基础,超过4B时必须独占。 示例 type A1 struct { a bool b uint32 c bool d uint32 e uint8 f uint32 g uint8 } 计算一下A1所需要占用的内存: 首先第1个4B中放入a,a是bool型,占用1B,剩余3B 这时看b是uint32,占用4B,剩余3B放不下,所以offset到下一个4B空间,这时我们会发现3B没有放东西,被浪费了 依次往下,A1要占用28B的空间 根据1,2两个步骤很容易看出,有很多浪费空间。 优化: type A2 struct { a bool c bool e u...阅读全文

博文 2018-06-29 15:34:44 sipt

golang redis demo code

package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func newConn() (redis.Conn, error) { c, err := redis.Dial("tcp", "192.168.0.2:6379") if err != nil { return nil, err } _, err = c.Do("AUTH", "redis@hsjc") if err != nil { return nil, err } return c, err } func main() { /* c, err := redis.Dial("tcp", "192.168.0.2:6379") if err != nil {...阅读全文

博文 2016-05-07 10:00:03 developerqah

【Leetcode】:22. Generate Parentheses 问题 in Go语言

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()" 解题思路:这道题和N-Queen问题非常类似,几乎是一样的解题模式。 首先需要明白,怎么放置括号是合法的,假设n=5的情况,已经合法的放置了4个括号,那么怎么判断下一个放什么括号合法呢? 放左括号:如果之前放置的左括号数>=n,那么一定不合法 放右括号:如果之前放置的左括号数<=之前放置的右括号数,那么...阅读全文

博文 2016-05-02 23:00:00 u013564276

经典算法:汉诺塔

学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔。算是算法的入门小题目之一吧~ 视频教程 什么是汉诺塔? 我这里直接拉来一个图解释一下(挂了请联系我)就是这么一个东西了,把所有的圆盘从左边移动到右边,并且大的圆盘不能够压住小的。怎么才能完成呢? 规则理解了,开始钻牛角尖 先来看看只有一个圆盘的情况, 嗯 相当的简单 A--->C 就可以了 两个的情况呢? 也不难 A--->B A--->C B--->C 三个的话有点挑战了 大家自己推一推 好的 十个呢?就算想了半天弄好了,怎么让程序帮我们做呢?头大! 牛角尖钻完了,冷静分析 在我们每次完成之前的状态,都是把最大的圆盘放到了最右边,剩下的圆盘放到了中间。然后把中间的再都放到右边就好了 这道理就跟把大象装冰箱一样...阅读全文

博文 2018-11-02 12:34:46 蒋吉兆

golang实现和讲解动态规划算法(背包问题)

前言 昨天阅读了程序员小灰的《什么是动态规划》,当时还在亲戚家中,借了纸笔计算了一通,回家结合一些背包问题文章用程序实现了一下。文章先从简单的解决斐波那契数列入手,接着在讲解工人挖矿获取最大价值的例子中(其实就是经典的0-1背包问题),有一些容易使你晕头转向的问题,本文当作算法复习,并且记录了解题思路。 0-1背包问题 有n件物品和容量为cap的背包,每件物品有自己的容量w和价值v,每件物品只能选择放或者不放,求解让装入背包的物品容量不超过背包容量(cap)的情况下,能获得的最大价值是多少。 问题描述 小灰文章里举例的是工人挖矿,我们还是转换成物品放入背包的问题来描述,并且价值缩小10倍,只为了减少图片里表格的宽度。 我们把工人挖矿问题套用到背包问题里。容量=工人数,物品=金矿,背包装下最大...阅读全文

博文 2020-05-04 14:32:40 叶子

xstrings:Go 语言字符串库的补完

项目地址:https://github.com/huandu/xstrings xstrings 是一个很简单的 Go 语言库,简单说就是提供了一些标准库 strings 没提供但依然很有用的字符串算法。每个字符串算法都对效率进行了优化,所有函数都可以做到不超过 O(n) 的复杂度,并且尽量节省内存使用,仅在需要分配内存的时候分配。 现在实现的算法几乎都是其他语言(主要是 Python/Ruby/PHP/Perl)标准库里提供的算法,用 Go 重新实现一遍。未来也许我还会继续加入更多的方法,不过我不希望这个库成为一个算法大杂烩,因此仅仅会考虑那些特别有名且语言无关的函数。 Go 的 strings 操作字符串的时候都是以 rune 为单位进行,但 string 类型却只能以 byte 为单位...阅读全文

博文 2017-02-09 13:43:22 huandu

Golang Map实现(一)

本文学习 Golang 的 Map 数据结构,以及map buckets 的数据组织结构。 hash 表是什么 从大学的课本里面,我们学到:hash 表其实就是将key 通过hash算法映射到数组的某个位置,然后把对应的val存放起来。如果出现了hash冲突(也就是说,不同的key被映射到了相同的位置上时),就需要解决hash冲突。解决hash冲突的方法还是比较多的,比如说开放定址法,再哈希法,链地址法,公共溢出区等(复习下大学的基本知识)。 其中链地址法比较常见,下面是一个链地址法的常见模式: golang_hash_1_common.jpg Position 指通过Key 计算出的数组偏移量。例如当 Position = 6 的位置已经填满KV后,再次插入一条相同Position的数据将...阅读全文

博文 2020-04-26 10:32:44 搬砖程序员带你飞

大佬们帮我看看一个协程计算的问题,报dead lock

func main(){ //协程并发计算的列子同步计算 //10000个数如果是偶数/2+1,如果是奇数*2 write:=make(chan int ,100) read:=make(chan int ,200) singal:=make(chan bool,5) //5个信号灯为true代表5个协程都计算完毕了 //开启一个协程写入要计算的数据 go putChan(write) //开启5个协程计算 for i:=0;i<5;i++{ go compulate(write,read,singal) } //main函数中读取ch3如果读取到了代表计算完成了,应该关闭ch2 for i:=0;i<5;i++{ res:=<-singal //代码在这里报错了all goroutines...阅读全文

博文 2019-08-28 17:52:13 blackdinosuar

TCP连接的状态变迁

全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。 共有的:(1)CLOSED (2)ESTABLISHED 。 ![image.png](https://static.studygolang.com/190222/c1b69cd34b964ea79036a1f00b187f9f.png) 状态变迁 1、建立连接时的状态变迁 一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN...阅读全文

golang modules

本文使用go的版本 go1.13 ,使用的系统为 macos go modules 使用 go mod init hello ##初始化 go run hello.go ##运行项目搞定 使用go modules 不需要讲想法放大GOPATH下的src中并且只需要在项目的根目录执行 go mod init 模块名称,然后开始写代码,最后执行 go run hello.go go会自动下载项目依赖的第三方的包。简直太方便了。 下载之后的包放哪里了? 使用 go mod 依赖的包并没有放在项目的 vendor 中 ,而是放在了$GOPATH/pkg/mod中 如果go run 的时候特变慢可以先 export GOPROXY="https://goproxy.io" 添加代理,然后在重新执...阅读全文

博文 2019-09-18 18:02:38 曹飞龙

Golang map

前些天看了DAVE CHENEY大神的直播。里面讲到了go的map实现。做个笔记 (我用的是go1.13 貌似大神直播时候用的是还没发布的1.15 所以本文中的代码都是1.13中的。与1.15略有差异) compile time rewriting: 左边对map的操作实际上被编译成了右边的调用 v := m["key"] -> runtime.mapaccess1(m, "key", &v) v, ok := m["key"] -> runtime.mapaccess2(m, "key", &v, &ok) m["key"] = 9001 -> runtime.mapinsert(m, "key", 9001) delete(m, "key") -> runtime.mapdelete(m...阅读全文

博文 2020-05-12 11:35:48 郭老汉