|  |      1xieren58      2014-01-28 17:03:38 +08:00  3 不用~ | 
|      4congjunfeng      2014-01-28 17:47:56 +08:00  1 首先,关于map的函数问题,你应该去找第三方的库,而不是在官方文档里面找。其次,手动写一个你所说的去重、合并的功能的库,也没什么麻烦的。 没想明白你所说的“最简单的循环操作”是指什么,如果你能给出例子,可能会有个参考。 Go是一个强类型的语言,所以你不要用Ruby、Python这类动态语言的做法去做Go,你应该从C++、C的做法去看Go。 | 
|  |      5tonyseek      2014-01-28 17:50:20 +08:00  7 | 
|      6congjunfeng      2014-01-28 17:52:33 +08:00 @tonyseek 你跑题了。 | 
|  |      7mahone3297      2014-01-28 20:49:18 +08:00  1 关联数组存在不同类型的数据不是很正常的吗 c里面,java里面,会允许这样做?所以你要看上门说的,你要以c的思想来看问题,而不是php,ruby | 
|      8chrishine      2014-01-28 22:05:04 +08:00 Java这种弱逼语言就不提了. C++可以通过lambda, declval实现关联数组不同类型.当然要说C++的地位,自然不能和Java相提并论,因为C++不是一门语言,它是许多种方言的统称. go最好通过代码来解释一下 . | 
|  |      99 OP @congjunfeng @wayn3h0 @mahone3297 谢回复,我回来后想了下,主要是因为要把 php 转成 go,两者风格相差太大,php 中一个数组一个函数解决的问题,go 需要额外做很多类型判断的操作,比如说取出一条记录,id 只可能是 int 类型,php 中直接就用上了,但是 go 中就需要先转换成 int,然后需要用它做字符串操作时又要转换成 string...   map merge 的问题,我找了这个 https://github.com/peterbourgon/mergemap/blob/master/mergemap.go 像这样的库我觉得官方应该提供的,不然 http://godoc.org/ 上不会有这么多 package 我刚接触 go 不久,理解有偏差的地方,多多指教 | 
|  |      11luikore      2014-01-28 22:24:39 +08:00  1 你需要催眠自己说判断类型是必须的, 判断类型不费劲, 判断类型很安全... map 相关函数就不要想了, 你要修正三观, 变成不管遇到什么都先一个无脑 for 啪上去的人... | 
|  |      12dndx      2014-01-28 23:25:47 +08:00 不想类型断言就别用 interface{} 。你在 C 下面用 void* 难道不需要 cast 就能 dereference?这跟 Go 有什么关系? | 
|  |      13xdeng      2014-01-28 23:32:01 +08:00 via iPhone 我也遇到。我所知有3个 | 
|  |      14G2bN4dbX9J3ncp0r      2014-01-29 01:15:02 +08:00  1 学php毁一生啊 | 
|  |      15aisk      2014-01-29 01:22:10 +08:00  2 @9 重构php项目何苦用go,Python或者Ruby都很好,甚至php都比go用起来顺手。go本来就不是为了一般的web项目而生的 | 
|  |      16wayn3h0      2014-01-29 03:00:17 +08:00  1 @9 不明白你所为的转来转去是为什么,如你说所如果id是int型,你直接用map[int]*RecordType就完了么,为什么用string做键值呢?int输出成string则fmt.Sprintf("%d", int) 不是很方便吗。。。如果还怕码字码太多,直接在RecordType里写个 func (this RecordType) IdString() string { return fmt.Sprintf("%d",this.id) } 还不没搞明白楼主所谓的坑是什么啊?循环也是很方便的嘛: for k, v := range map {} 取值也是很方便的嘛: if common, ok := map[key]; ok {} | 
|  |      17darklowly      2014-01-29 06:52:15 +08:00 via iPhone 兰州烧饼。一说关联数组,就知道是php.这类问题都敢问,太浮躁了 | 
|  |      189 OP | 
|  |      19cnbuff410      2014-01-29 09:42:49 +08:00 楼主问一个Go的问题,就有不少不用Go的友人跑过来冷嘲热讽。这是什么样的精神啊。 | 
|  |      20pubby      2014-01-29 10:04:41 +08:00 昨天遇到一个坑 fp,_ := os.Open(...) fp.ReadAt(buf,1000) 之后文件指针没移动(文档中没有指出这点0) fp.Seek(0,1) 得到的当前读写位置还是0 | 
|  |      21davepkxxx      2014-01-29 10:48:46 +08:00 我试用了一段时间之后就继续回去玩scala了,go吸引我的就只剩多返回值这一点了。 | 
|  |      22zonyitoo      2014-01-29 12:26:58 +08:00 我用了一阵子Go发现很多坑,不过依然在坚持用,因为它很像C,用起来挺亲切的。不过相比一直喜爱的Python,Go用得实在是憋屈 | 
|  |      23luikore      2014-01-29 12:45:18 +08:00 @wayn3h0 你是没写过处理大量 json 的程序吧... 一堆 for 面条代码过后都看不出是干嘛的指的就是那种"方便"的代码 | 
|  |      259 OP @wayn3h0 刚看官方博客 http://blog.golang.org/json-and-go ,里面这个例子跟我之前想描述的差不多: f = map[string]interface{}{ "Name": "Wednesday", "Age": 6, "Parents": []interface{}{ "Gomez", "Morticia", }, } m := f.(map[string]interface{}) for k, v := range m { //每次都这样搞一下 switch vv := v.(type) { case string: fmt.Println(k, "is string", vv) case int: fmt.Println(k, "is int", vv) case []interface{}: fmt.Println(k, "is an array:") for i, u := range vv { fmt.Println(i, u) } default: fmt.Println(k, "is of a type I don't know how to handle") } } | 
|  |      269 OP @Livid v2ex 其他地方该改的都改过了,只有这个回复框万年不变,难道没有支持代码编辑的打算吗,程序员的论坛不支持代码编辑真的很难受。只能通过第三方的嵌入这是一个好主意吗。 像这种做之前就可以预见必定大受欢迎的功能 (为何这么肯定?统计贴代码的帖子有多少就知道),为何不做呢? | 
|      27congjunfeng      2014-01-29 16:07:20 +08:00  1 @9 如果用go重构PHP的项目,还用PHP的思路的以及业务逻辑的话,真的很容易就掉坑里面了。我没研究过PHP,不过这两个相差太大,一定不要用PHP的思路来做,不然很难看到Go好的地方,而PHP好的地方,go不一定有,所以就一定会感觉越来越坑。。。。 | 
|      28congjunfeng      2014-01-29 16:08:30 +08:00 @9 我用JSON都是用的struct,还真没用过map | 
|  |      299 OP @congjunfeng json 结构是不确定的,用 struct 可能要经常变动,所以就用 map 了 | 
|  |      30reusFork      2014-01-29 17:06:47 +08:00 | 
|  |      31sodatea      2014-01-29 20:21:39 +08:00 @Yiner python 是强类型、动态类型语言。请自行搜索以搞清楚「强类型 | 弱类型」、「静态类型 | 动态类型」这几种概念的具体含义…… | 
|      33a7a2      2016-12-30 17:32:39 +08:00 写吧 多写点 以后就可以复制粘贴了 |