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:\SOFTware\GoLand\GoProject\go_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)
	/*将byte转换为string
	参考:https://www.cnblogs.com/wangjiale1024/p/10979993.html
	*/
	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,没啥影响,所以应该写什么都行(而且输出连顺序都不变,就离谱,那干嘛还要两个函数??)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值