Перейти от интерфейса к требуемому типу - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть этот метод, где я получаю int64 параметр. Параметр используется в некоторых областях, а затем предполагается передать его другому методу (из внешней библиотеки), который ожидает другой тип: type AcctInterimInterval uint32

Я пытался преобразовать его в uint32, но скрипт жалуется на это: invalid type assertion: ... (non-interface type int on left).

Я также пытался преобразовать его в AcctInterimInterval, но на этот раз с другой ошибкой: interface conversion: interface {} is int, not main.AcctInterimInterval

Вот мой тестовый код:

package main

import (
    "fmt"
)

//  defined in some other lib
type AcctInterimInterval uint32

//  defined in some other lib
func test(value AcctInterimInterval){
    fmt.Println(value)
}

func main() {
    //  int received externally
    interval := 60

    var acctInterval interface{} = interval

    test(acctInterval.(AcctInterimInterval))
}

Связанная игровая площадка: https://play.golang.org/p/tTW5J2FIAy3

1 Ответ

4 голосов
/ 17 апреля 2019

Ваша acctInterval переменная переносит значение int, поэтому вы можете только type-assert int из него:

acctInterval.(int)

Что тогда вы можете конвертировать в AcctInterimInterval:

test(AcctInterimInterval(acctInterval.(int)))

Попробуйте на Go Playground .

...