Golang函数中循环生成输出并返回结果的解决方案咨询
解决方案
问题分析
你的代码存在两个核心问题:
- 函数声明为无返回值类型,却尝试返回变量
output,会触发编译错误 - 循环内的
output是局部变量,无法在循环外访问,也未存入容器供后续返回
实现方案
根据需求,提供两种实用实现方式:
1. 返回格式化字符串切片(推荐,灵活性更高)
修改函数返回值为[]string,在循环前声明切片,每次循环将格式化后的字符串追加到切片中,最后返回整个切片:
import ( "encoding/json" "fmt" "io" "log" ) func Search_num(mobilenumber string) []string { // .......get request....... body, err := io.ReadAll(search_res.Body) if err != nil { log.Fatalln(err) } defer search_res.Body.Close() var jsonbody Response if err := json.Unmarshal(body, &jsonbody); err != nil { log.Fatalln(err) } // 声明存储结果的切片 var outputs []string for _, p := range jsonbody.Data { output := fmt.Sprintf("Name : %s\nMobile : %s\nEmail : %s\nCarrier : %s\nCity : %s\n", p.Name, p.Phone.Mobile, p.INTaddress.Email, p.Phone.Carrier, p.Address.City) // 将格式化后的字符串追加到切片 outputs = append(outputs, output) } return outputs }
2. 返回拼接后的单个格式化字符串
如果需要将所有结果合并为一个字符串返回,可以使用strings.Join将切片内容拼接:
import ( "encoding/json" "fmt" "io" "log" "strings" ) func Search_num(mobilenumber string) string { // .......get request....... body, err := io.ReadAll(search_res.Body) if err != nil { log.Fatalln(err) } defer search_res.Body.Close() var jsonbody Response if err := json.Unmarshal(body, &jsonbody); err != nil { log.Fatalln(err) } var outputs []string for _, p := range jsonbody.Data { output := fmt.Sprintf("Name : %s\nMobile : %s\nEmail : %s\nCarrier : %s\nCity : %s\n", p.Name, p.Phone.Mobile, p.INTaddress.Email, p.Phone.Carrier, p.Address.City) outputs = append(outputs, output) } // 用空字符串拼接所有结果,也可自定义分隔符 return strings.Join(outputs, "") }
调用示例
以切片返回版本为例,其他函数可这样调用:
results := Search_num("1234567890") for _, res := range results { fmt.Println(res) }
内容的提问来源于stack exchange,提问作者Vinay Kumar Rasala
相关产品推荐
相关产品推荐

