Вот вариант с числами
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) } |
По сути, приведение типа не такое уж и сложное, я бы даже сказал элементарное.
Держи примеры для числовых типов:
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) |
Вообще в отличие от 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) } |
Если переменная объявлена без явного указания типа (с помощью var или :=), то тип переменной выводится из значения на правой стороне.
Если же правая часть объявления типизирована, то новая переменная получает такой же тип.
Ага, с теорией всё вроде как ясно, не могли бы вы скинуть пример кода, чтобы было легче понять, мне всегда было легче изучать всё сразу на практике. Люблю я щупать чужие кодики)))
Ну вот допустим:
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) } |
Спасибо большое за объяснения, очень интересно и понятно мне всё объяснили. Теперь можно и самому пробовать делать приведение и вывод типа.