```go
package main
import "fmt"
func main() {
a2 := "12435"
//想用过这个函数过去 给他重复赋值
a(&a2)
//
// 这 a2 的值 为5 应该怎么做呢
fmt.Println(a2)
}
func a(ap interface{}) {
ap = 5
}
```
就是封装mongodb 查询函数 第一个参数为
```
type FindConstructor struct {
Where bson.M
}
```
第二个参数 `interface` 这个用来接受查询数据的返回值
遇到的问题是 第二个内存地址换了导致 不会有数据返回 但是使用 json.Unmarshal 能达到要求 所有完整代码如下
```
func Find(cstor FindConstructor, data interface{}) (findstatus FindStatusCode) {
d2 := []interface{}{}
table_name := getCollName(data)
find, err := db.Coll(table_name).Find(db.TimeOut(), cstor.Where)
if err != nil {
findstatus = checkMongoErr(err)
return
}
err = find.All(db.TimeOut(), &d2)
if err != nil {
findstatus = checkMongoErr(err)
return
}
var errbson error
var temporaryBytes []byte
var json_list = [][]byte{}
for _, v := range d2 {
temporaryBytes, errbson = bson.MarshalExtJSON(v, true, true)
if errbson != nil {
continue
}
json_list = append(json_list, temporaryBytes)
}
j := bytes.Join(json_list, []byte(","))
j2 := "[" + string(j) + "]"
err = json.Unmarshal([]byte(j2), &data)
return
}
```
#5
更多评论
```go
package main
import (
"encoding/json"
"fmt"
)
type s struct {
}
func main() {
a2 := "12435"
a(&a2)
fmt.Println(a2)
a1_str := map[string]string{
"a":"233",
}
a1_map := map[string]string{}
a1(a1_str,&a1_map)
fmt.Println("map 值",a1_map)
}
func a1( s map[string]string,smap interface{}) {
mb, _ := json.Marshal(s)
json.Unmarshal(mb,&smap)
}
func a(ap interface{}) {
ap = 5
}
```
```hash
//运行结果
12435
map 值 map[a:233]
```
忘解惑
#1