首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新定义的标志-在YouTube数据API 3中按键进行恐慌搜索

重新定义的标志-在YouTube数据API 3中按键进行恐慌搜索
EN

Stack Overflow用户
提问于 2015-04-14 14:52:32
回答 1查看 3.5K关注 0票数 0

我正试图搜索YouTube视频的键,就像在金刚例子。我对这段代码做了一些修改,让它按不同的键搜索几次。

当我搜索一次就可以了。

代码语言:javascript
复制
func main() {
    result1, err1 := SearchYoutubeByKey("hello")

    if err1 != nil {
        panic(err1)
    }
    fmt.Println(result1)

    // result2, err2 := SearchYoutubeByKey("world")
    // if err2 != nil {
    //  panic(err2)
    // }
    // fmt.Println(result2)
}

但如果我搜两遍..。

代码语言:javascript
复制
func main() {
    result1, err1 := SearchYoutubeByKey("hello")

    if err1 != nil {
        panic(err1)
    }
    fmt.Println(result1)

    result2, err2 := SearchYoutubeByKey("world")
    if err2 != nil {
        panic(err2)
    }
    fmt.Println(result2)
}

..。然后它会对错误信息感到恐慌..。

代码语言:javascript
复制
flag redefined: query

..。在线上..。

代码语言:javascript
复制
query := flag.String("query", str, "Search term")

完整代码:

代码语言:javascript
复制
package main

import (
    "code.google.com/p/google-api-go-client/googleapi/transport"
    "code.google.com/p/google-api-go-client/youtube/v3"
    "flag"
    "fmt"
    "net/http"
)

var (
    maxResults = flag.Int64("max-results", 25, "Max YouTube results")
    service    *youtube.Service
    response   *youtube.SearchListResponse
)

const developerKey = "youtube developer key"

type YoutubeSearchResult struct {
    Title, YoutubeId string
}

func SearchYoutubeByKey(str string) (result []*YoutubeSearchResult, err error) {
    query := flag.String("query", str, "Search term")
    flag.Parse()

    client := &http.Client{
        Transport: &transport.APIKey{Key: developerKey},
    }

    service, err = youtube.New(client)
    if err != nil {
        return
    }

    // Make the API call to YouTube.
    call := service.Search.List("id,snippet").
        Q(*query).
        MaxResults(*maxResults)
    response, err = call.Do()
    if err != nil {
        return
    }

    // Iterate through each item and add it to the correct list.
    for _, item := range response.Items {
        switch item.Id.Kind {
        case "youtube#video":
            result = append(result, &YoutubeSearchResult{Title: item.Snippet.Title, YoutubeId: item.Id.VideoId})
        }
    }
    return
}

func main() {


    result1, err1 := SearchYoutubeByKey("hello")

    if err1 != nil {
        panic(err1)
    }
    fmt.Println(result1)

    result2, err2 := SearchYoutubeByKey("world")
    if err2 != nil {
        panic(err2)
    }
    fmt.Println(result2)
}

因此,在网站上使用这些代码是不可能的。只有第一个用户才能第一次搜索,其他用户将失败。

我不能在运行时更改标志,但是如何在一个程序中按两个不同的键进行搜索?

更新

工作解决方案:

代码语言:javascript
复制
package main

import (
    "code.google.com/p/google-api-go-client/googleapi/transport"
    "code.google.com/p/google-api-go-client/youtube/v3"
    "flag"
    "fmt"
    "net/http"
)

var (
    maxResults = flag.Int64("max-results", 25, "Max YouTube results")
    service    *youtube.Service
    response   *youtube.SearchListResponse
    query      = flag.String("query", "str", "Search term")
)

const developerKey = "youtube api key"

type YoutubeSearchResult struct {
    Title, YoutubeId string
}

func SearchYoutubeByKey(str string) (result []*YoutubeSearchResult, err error) {
    flag.Parse()

    client := &http.Client{
        Transport: &transport.APIKey{Key: developerKey},
    }

    service, err = youtube.New(client)
    if err != nil {
        return
    }

    // Make the API call to YouTube.
    call := service.Search.List("id,snippet").
        Q(str).
        MaxResults(*maxResults)
    response, err = call.Do()
    if err != nil {
        return
    }

    // Iterate through each item and add it to the correct list.
    for _, item := range response.Items {
        switch item.Id.Kind {
        case "youtube#video":
            result = append(result, &YoutubeSearchResult{Title: item.Snippet.Title, YoutubeId: item.Id.VideoId})
        }
    }
    return
}

func main() {
    result1, err1 := SearchYoutubeByKey("hello")

    if err1 != nil {
        panic(err1)
    }
    fmt.Println(result1)

    result2, err2 := SearchYoutubeByKey("world")
    if err2 != nil {
        panic(err2)
    }
    fmt.Println(result2)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-14 15:00:29

恐慌信息告诉你到底出了什么问题。您的命令行标志应该只定义一次。如果您试图在运行时重新定义它们,则会引起恐慌。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29630598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档