NoPerfectName Engineer

自定义类型

2018-12-12
NoPerfectName

内置类型

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]

传值还是传引用

参考


Similar Posts

Comments