Golang:在文本文件中发送查询时“函数结束时缺少返回”
Posted
技术标签:
【中文标题】Golang:在文本文件中发送查询时“函数结束时缺少返回”【英文标题】:Golang: "missing return at end of function" when sending queries for item in text file 【发布时间】:2022-01-12 21:21:52 【问题描述】:我有这段代码,我在文本文件中的每行发送获取请求。但是,当我尝试运行代码时,我收到一条错误消息,提示“函数结束时缺少返回”。我知道这很可能是因为我在最后一个括号之前返回它,但我需要该括号内的代码,因为它定义了行、请求和正文内容。
我的代码:
// Routine
func main()
rep := 1000
results := make(chan string)
for i := 0; i < rep; i++
go func(num int)
results <- request(num)
(i)
for i := 0; i < rep; i++
fmt.Println(<-results)
func request(num int) string
// For name in names.txt
wordlist, err := readLines("assets/names.txt")
if err != nil
log.Fatalf("readLines: %s", err)
for _, line := range wordlist
// Send request
response, err := http.Get("https://accounts.com/" + line + "/userId")
if err != nil
fmt.Printf("%s", err)
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil
fmt.Printf("%s", err)
os.Exit(1)
fmt.Printf("%s\n", string(contents))
return string(contents)
【问题讨论】:
错误是因为没有返回,所以你必须添加一个返回(或恐慌,但这在这里更没有意义)。除非您只需要从文件中读取第一行,否则您如何期望从循环中提前返回以工作? 【参考方案1】:根据Go Programming Language Specification
如果函数的signature声明了结果参数,函数体的语句列表必须以terminating statement结尾。
为了帮助解释问题,我们可以simplify your code 至:
package main
import "fmt"
func main()
fmt.Println(request([]string"foo"))
func request(wordlist []string) string
for _, line := range wordlist
// Do something
return line
错误可以通过adding a return after the loop修复:
package main
import "fmt"
func main()
fmt.Println(request([]string"foo"))
func request(wordlist []string) string
for _, line := range wordlist
// Do something
return line
return ""
之所以需要额外的return
,是因为函数可以传递一个空切片。在这种情况下,for
中的代码永远不会执行,这意味着没有终止语句(请注意,您可以将return
替换为panic
)。如果readLines
返回一个空切片,这同样适用于您的代码。
我认为值得注意的是,在这里使用循环没有多大意义,因为您似乎只对第一个值感兴趣。您可以使用something like 获得相同的结果:
package main
import "fmt"
func main()
fmt.Println(request([]string"foo", "boo"))
fmt.Println(request(nil))
func request(wordlist []string) string
if len(wordlist) == 0
return "No Data"
line := wordlist[0]
// do something...
return line
我怀疑您实际上想要处理所有行,但不幸的是,您的问题没有提供足够的上下文来进一步提供帮助。
【讨论】:
【参考方案2】:您的函数想要查找文本。 所以在那个循环中: 找到后跳出循环, 然后返回值。 (我把它最小化了一点)
result := ""
for _, line := range wordlist
if found
result = yourAnswer
break
return result
【讨论】:
以上是关于Golang:在文本文件中发送查询时“函数结束时缺少返回”的主要内容,如果未能解决你的问题,请参考以下文章
Golang fsnotify 在 Windows 上为同一个文件发送多个事件