golang приведение типов и их вывод

Пользователь

Как в Golang делать приведение типов данных и делать их вывод? Объясните пожалуйста на примерах и с использованием реального кода. Если есть какие-то сайты с подсказками, то тоже кидайте.

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket
4 июля 2020 г., 21:11

Пользователь

Вот вариант с числами

var a int
var b int64

a = 5
b = int64(a)

Golang типизированый язык и переменная не может быть разного типа! Всегда нужно приводить к другому типу и конвертировать если нужно


Вот тоже неплохой пример

package main

import (
	"fmt"
	"math"
)

func main() {
	var x, y int = 3, 4
	var f float64 = math.Sqrt(float64(x*x + y*y))
	var z uint = uint(f)
	fmt.Println(x, y, z)
}
8 июля 2020 г., 4:06

Пользователь

По сути, приведение типа не такое уж и сложное, я бы даже сказал элементарное.

Держи примеры для числовых типов:

var i int = 42

var f float64 = float64(i)

var u uint = uint(f)

Или проще:

i := 42

f := float64(i)

u := uint(f)

8 июля 2020 г., 11:17

Пользователь

Вообще в отличие от C, в Golang’е явные приведения типов требуют присвоения между различными элементами. В данном примере это можно подробно пронаблюдать:

package main

import (

 "fmt"

 "math"

)

func main() {

 var x, y int = 3, 4

 var f float64 = math.Sqrt(float64(x*x + y*y))

 var z uint = uint(f)

 fmt.Println(x, y, z)

}


8 июля 2020 г., 11:48

Пользователь

Если переменная объявлена без явного указания типа (с помощью var или :=), то тип переменной выводится из значения на правой стороне.

Если же правая часть объявления типизирована, то новая переменная получает такой же тип.

8 июля 2020 г., 12:06

Пользователь

Ага, с теорией всё вроде как ясно, не могли бы вы скинуть пример кода, чтобы было легче понять, мне всегда было легче изучать всё сразу на практике. Люблю я щупать чужие кодики)))


8 июля 2020 г., 13:51

Пользователь

Ну вот допустим:

var i int

j := i // j это int

Но когда же правая часть содержит нетипизированную числовую константу, то новая переменная может быть float64, int или complex128 в зависимости от того, какая точность константы:

i := 42          // int

f := 3.142       // float64

g := 0.867 + 0.5i // complex128

И вот тебе пример использования всего этого:

package main

import "fmt"

func main() {

 v := 42

 fmt.Printf("v is of type %T\n", v)

}


8 июля 2020 г., 14:38

Пользователь

Спасибо большое за объяснения, очень интересно и понятно мне всё объяснили. Теперь можно и самому пробовать делать приведение и вывод типа.


8 июля 2020 г., 14:47