Go 类型
Go语言:一种静态类型的编程语言
Go基本类型
Go基本类型?Go语言自带的类型,比如数值类型、浮点类型、字符类型以及布尔类型。
特点?原始类型,不可改变,对其操作(比如把值传递给函数:实际上传递的是一个值的副本),在多线程安全
func main() {
name:="张三"
fmt.Println(modify(name)) //张三张三 传递的是一个副本,返回的是一个新创建的字符串
fmt.Println(name) //张三 本来name的值未改变
}
func modify(s string) string{
s=s+s
return s
}
Go引用类型
引用类型有?切片、map、接口、函数类型以及chan
引用类型原理?创建引用类型的变量,其实是一个标头值,标头值里包含一个指针,指向底层的数据结构,当我们在函数中传递引用类型时,其实传递的是这个标头值的副本,它所指向的底层结构并没有被复制传递,这也是引用类型传递高效的原因。
注:本质上可理解函数的传递都是值传递,不过引用类型传递的是一个执行底层数据的指针,可修改共享的底层数据的值,进而影响到所有引用这个共享底层数据的变量。
特点是?它的修改可以影响到任何引用到它的变量
func main() { ages := map[string]int{"张三": 20} fmt.Println(ages) //20 modify(ages) fmt.Println(ages) //10 } func modify(m map[string]int) { m["张三"] = 10 }
结构类型
结构类型的作用?用来描述一组值,本质上是一种聚合型的数据类型。
结构体内的值可以有哪些?基本的原始类型、引用类型,或者自己定义的其他类型。
注:如果允许修改值本身,选择引用类型,如果不允许,选择基本类型。
func main() { //jim := person{10,"Jim"} //var p person jim := person{10,"Jim"} fmt.Println("原始的jim",jim) modify(jim) fmt.Println("modify之后的jim",jim) modify1(&jim) fmt.Println("modify1之后的jim",jim) } func modify(p person) { p.age =p.age+10 } func modify1(p *person){ p.age = p.age+10 } type person struct { age int name string }
输出:
原始的jim {10 Jim} modify之后的jim {10 Jim} modify1之后的jim {20 Jim}
自定义类型
法一:上面的结构体类型,就是我们自定义的类型。
法二:基于一个已有的类型,就是基于一个现有的类型创造新的类型,这种也是使用type
关键字。
type Duration int64 //Go语言是一种强类型语言,虽然Duration基于int64创建,但不能相互赋值 var dur Duration //dur = int64(100) 报错 类型转换异常 fmt.Println(dur) //输出为0
笔记,万变不离。