内置类型
Golang的内置类型包括数值类型、字符串类型和布尔类型,在使用自定义类型的时候如果值类型为内置类型,不允许自定义类型和内置类型做转换。也就是说两种不同类型的值即便互相兼容,也不能互相赋值。
package main
import "fmt"
type Time string
func main() {
var t Time = "2019-10-12"
//注销下面两行将出错
//s := "2019-10-12"
//t = string(s) 或 t = s
fmt.Println(t)
}
引用类型
Golang的引用类型包括切片、映射、通道、接口和函数类型。引用类型本质上一个指向底层数据结构的指针,所以不要共享引用类型的值,只需要通过复制来传递一个引用类型的值的副本,本质上是共享底层数据结构。自定义引用类型可以进行类型转换,本质上其实是共享底层数据结构。
package main
import "fmt"
type Duration []byte
func test(a Duration) {
a[0] = 20
}
func main() {
var a Duration
c := []byte{1,2,3}
a = Duration(c) //或 a = c 隐式转换
test(a)
fmt.Println(a)
}
//output: [20,2,3]