栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang too many arguments to return

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang too many arguments to return

在获取百度语音合成的token的时候遇到的问题:

代码参考:https://ai.baidu.com/forum/topic/show/497597

报错信息如下:

GOROOT=null #gosetup
GOPATH=null #gosetup
go.exe build -i -o D:SOFTwareGoLandGoProjectgo_build_GoProject_.exe . #gosetup
go build: -i flag is deprecated
# _/D_/SOFTware/GoLand/GoProject
.test.go:31:2: too many arguments to return
	have ([]byte)
	want ()
.test.go:37:22: fetch_token() used as value

Compilation finished with exit code 2

代码如下:

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
)

const (
	API_KEY = "创建项目时获取的API Key"
	SECRET_KEY = "创建项目时获取的Secret KeyH"

	TOKEN_url = "http://openapi.baidu.com/oauth/2.0/token"

)

func fetch_token(){
	FeToken := url.Values{}
	FeToken.Set("grant_type", "client_credentials") //规定,无需修改
	FeToken.Add("client_id", API_KEY) //根据自己申请填写
	FeToken.Add("client_secret", SECRET_KEY) //根据自己申请填写
	res, err := http.PostForm(TOKEN_url, FeToken)
	robots, err := ioutil.ReadAll(res.Body)
	res.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s", robots)
	return robots
}


func main() {
	//fetch_token()
	token := fetch_token()
	fmt.Println(token)
}

 

参考:https://blog.csdn.net/weixin_38738277/article/details/103290037

too many arguments to return
        have (*tools.ResponseBean)
        want ()

、这里指在函数返回另外一个类参数,其实是不用返回???我表示不懂

go里,函数有返回值则必须声明,而有返回值的函数就必须返回。。。go可是强类型语言啊。。。

编程小白遇到的错,有毒了! 在这里报错是因为没声明某些函数的用法,或者是用法错误
————————————————
版权声明:本文为CSDN博主「风雨雾花丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38738277/article/details/103290037

修改后

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
)

const (
	API_KEY = "创建项目时获得的API Key"
	SECRET_KEY = "创建项目时获得的Secret Key"

	TOKEN_url = "http://openapi.baidu.com/oauth/2.0/token"

)

func fetch_token()(string){
	FeToken := url.Values{}
	FeToken.Set("grant_type", "client_credentials") //规定,无需修改
	FeToken.Add("client_id", API_KEY) //根据自己申请填写
	FeToken.Add("client_secret", SECRET_KEY) //根据自己申请填写
	res, err := http.PostForm(TOKEN_url, FeToken)
	robots, err := ioutil.ReadAll(res.Body)
	res.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	//fmt.Printf("%s", robots)
	
	str := string(robots)
	robots[0] = 'i'
	//fmt.Printf(str)
	return str
}


func main() {
	//fetch_token()
	token := fetch_token()
	fmt.Println(token)
}

输出:

如果返回值设成[]byte会打印奇怪的东西emmm

补充一下,main函数修改成这样就可以把token单独提取出来了

func main() {
	//fetch_token()
	token := fetch_token()
	//token1 := strings.Index(token, ":")
	token1 := strings.Index(token, ":")
	token2 := strings.Index(token, ",")
	token = token[token1+2:token2-1]
	fmt.Println(token)

}

 

再次补充一下,有关数据类型

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
	"reflect"
)

const (
	API_KEY = "创建项目时获得的API Key"
	SECRET_KEY = "创建项目时获得的Secret Key"

	TOKEN_url = "http://openapi.baidu.com/oauth/2.0/token"

)

func fetch_token(){
	FeToken := url.Values{}
	FeToken.Set("grant_type", "client_credentials") //规定,无需修改
	FeToken.Add("client_id", API_KEY) //根据自己申请填写
	FeToken.Add("client_secret", SECRET_KEY) //根据自己申请填写
	fmt.Println(FeToken)
	fmt.Println("FeToken 的数据类型是:",reflect.TypeOf(FeToken))
	res, err := http.PostForm(TOKEN_url, FeToken)
	robots, err := ioutil.ReadAll(res.Body)
	res.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s", robots)
	//return robots
}


func main() {
	fetch_token()
}

输出:

尝试了全都改成Add或者加上Set,没啥影响,所以应该写什么都行(而且输出连顺序都不变,就离谱,那干嘛还要两个函数??)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号