путаница в понимании преобразования типов в го - PullRequest
0 голосов
/ 01 марта 2019
    package main

    import (
    "fmt"
    )

    type val []byte

   func main() {
    var a []byte = []byte{0x01,0x02}
    var b val = a
    fmt.Println(a)
    fmt.Println(b)
}

o / p: [1 2] [1 2]

Здесь я понимаю, что идентификаторы a, b имеют один и тот же базовый тип ([] байт).поэтому мы можем поменять значения ч / б 2 переменных.

package main

import (
    "fmt"
)

type abc string

func main() {
    fm := fmt.Println
    var second = "whowww"
    var third abc = second //compile Error at this line 12
    fm(second)
    fm(third)

}

В строке 12 я не могу назначить переменную.Эту ошибку можно устранить с помощью явного преобразования T (x), я хочу понять, почему мы не можем выполнить неявное преобразование, поскольку обе переменные имеют один и тот же базовый тип, но я не могу назначить его.

Может кто-нибудь объяснить причину этого?

Если возможно, предоставьте мне хорошую документацию для преобразования типов между переменными, типами структуры, параметрами функции.

1 Ответ

0 голосов
/ 05 марта 2019

Это по замыслу.Язык программирования Go требует назначения между различными типами для явного преобразования.

Может показаться, что вы просто присваиваете псевдониму строковый тип, чтобы иметь другое имя, но технически вы создаете новый тип с типом хранения строки, в этом есть небольшая разница.

Способ определения псевдонима в Go ( с 1.9 ) несколько отличается, есть знак равенства.

type abc = string

Если есть какая-то путаница относительно того, почему Go не имеет неявных преобразований, это может показаться глупым, когда вы имеете дело только с базовым строковым типом, но с более сложнымтипы, это гарантирует, что программист знает, просто посмотрев на код, что происходит преобразование.

Это особенно полезно при отладке приложения, особенно при преобразовании между числовыми типами, чтобы знать, когда происходит преобразование, так что если есть усечение битов, например, от uint64 до uint32, это очевидночтобы увидеть, где это происходит.

https://tour.golang.org/basics/13

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