Go 类型

Posted ycx95

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Go 类型的主要内容,如果未能解决你的问题,请参考以下文章

Go 系列教程 —— 17. 方法

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

你知道的Go切片扩容机制可能是错的

golang代码片段(摘抄)

GoLang学习之变量定义和初始化

Go语言切片