在获取百度语音合成的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,没啥影响,所以应该写什么都行(而且输出连顺序都不变,就离谱,那干嘛还要两个函数??)