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