如何在Go中编写一个同时接受string和int64类型的函数?

时间:2016-08-06 07:06:23

标签: go types

我的功能看起来像这样

func GetMessage(id string, by string) error {
    // mysql query goes here
}

我的message_id是字符串,而id是主键。

我想接受id参数的两种类型。

我试过这样的

if (by == "id") {
        int_id, err := strconv.ParseInt(id, 10, 64)
        if err != nil {
            panic(err)
        }
        id = int_id
    }

但是我收到了像

这样的错误
cannot use int_id (type int64) as type string in assignment

有人可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:4)

像这样的工作样本使用interface{}

package main

import "fmt"
import "errors"

func GetMessage(id interface{}) error {
    //fmt.Printf("v:%v\tT: %[1]T \n", id)
    switch v := id.(type) {
    case string:
        fmt.Println("Hello " + v)
    case int64:
        fmt.Println(v + 101)
    default:
        //panic("Unknown type: id.")
        return errors.New("Unknown type: id.")
    }
    return nil
}

func main() {
    message_id := "World"
    id := int64(101)
    GetMessage(message_id)
    GetMessage(id)
}

输出:

Hello World
202