Возможно ли иметь функцию, которая возвращает либо Integer, либо Float в Golang? - PullRequest
0 голосов
/ 02 мая 2019

Я хотел бы создать функцию, которая возвращает целочисленное значение, если внутри функции проходит условие, а в противном случае число с плавающей запятой. Как я могу справиться с этим с Go? Спасибо!

Ответы [ 3 ]

2 голосов
/ 02 мая 2019

Это прямо невозможно на Голанге.В целом, статически типизированные языки обычно делают все возможное, чтобы предотвратить этот сценарий, потому что это очень затрудняет проверку типов.Проверка типа необходима, потому что целочисленные значения и числа с плавающей запятой несовместимы.

Вы можете вернуть interface{}.Однако как звонящий узнает, что вы вернули?

1 голос
/ 02 мая 2019

Это то, что вы ищете?

package main

import "fmt"

func number(intOrFloat bool) interface{} {
    if intOrFloat { //return int if this flag is true
        return 5
    }
    return 5.5
}

func main() {
    printType(number(true))
    printType(number(false))
    printType("Nihanth")
}

func printType(value interface{}) {
    if number, ok := value.(int); ok {
        fmt.Printf("I have got an integer %d\n", number)
    } else if number, ok := value.(float64); ok {
        fmt.Printf("I have got float %f\n", number)
    } else {
        fmt.Printf("%+v is not integer or float", value)
    }
}
0 голосов
/ 02 мая 2019

Да, это возможно. Вам просто нужно вернуть его как число с плавающей точкой:

func doStuff(flag bool) float32 {
    if flag {
        return 1.1
    }
    return 1
}

func main() {
    num1 := doStuff(true)
    num2 := doStuff(false)
    fmt.Println("Num1: ", num1)
    fmt.Println("Num2: ", num2)
}

Единственное, что имеет значение, это то, как вы форматируете его для отображения.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...