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

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

от julian , в категории: Общие вопросы , 4 года назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

7 ответов

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

от monte , 4 года назад

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

1
2
3
4
5
var a int
var b int64

a = 5
b = int64(a)

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


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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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)
}

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

от herminio , 4 года назад

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

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

1
2
3
4
5
6
7
8
9
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
	
Или проще:
	
i := 42
f := float64(i)
u := uint(f)

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

от anthony , 4 года назад

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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)
}


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

от anthony , 4 года назад

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

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

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

от julian , 4 года назад

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


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

от anthony , 4 года назад

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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)
}


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

от julian , 4 года назад

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