go语言入门四(复合类型数组切片指针)(代码片段)

itxiaoye itxiaoye     2022-12-04     247

关键词:

我们学过了基础数据类型 现在学习下复合类型

复合类型:把基础类型封装起来了 。

指针

指针可是c语言中的重头戏,指针数组 数组指针 函数指针 指针函数 回调函数 回调函数的数组 一级指针二级指针三四五 。。。。c语言指针有可以进行判断 进行+-等操作 go语言是不行的

go语言弱化了指针,最多只有二级指针

基础数据类型存放的是值 数

指针存放的是地址,切记是地址

技术图片
package main

import "fmt"

func main() 

    var a int = 10
    var p  *int = &a

    fmt.Println(p)
    fmt.Println(&a)
View Code

&就是取地址的意思 &a吧a的地址取出来给了p

指针定义了最好要初始化,要不然后期用了 忘记赋值可就成了野指针

结果 技术图片 因为p存放的是a的地址 所以地址是一样的

 

我们如何取出p地址的值那

技术图片
package main

import "fmt"

func main() 

    var a int = 10
    var p  *int = &a

    fmt.Println(p)
    fmt.Println(&a)

    fmt.Println(*p)
    fmt.Println(a)

View Code

我们可以用*的方法吧p存的地址值取出来。

结果就是10 10了 

我们再来看看二级指针

技术图片
package main

import "fmt"

func main() 

    var a int = 10
    var p  *int = &a
    var pp ** int = &p

    fmt.Println(&a)
    fmt.Println(p)
    fmt.Println(*pp)

    fmt.Println(&p)
    fmt.Println(pp)



View Code

技术图片

 

 我们来分析下这段代码,前三个都是打印的a的地址

&a是a的地址毋庸置疑 p存的也是a的地址 pp存放的是p的地址 *pp就是取出p的值也就是a的地址

最后两行 打印的都是p的地址,&p就是p的地址 pp 也是p的值

函数本身也是一种类型,学完了函数来学习闭包函数吧

闭包函数

技术图片
package main

import "fmt"

func main() 
    a := getStack("龙玉1")
    b := getStack("龙玉2")

    c := a(10)
    d := b(20)

    c = a(10)
    d = b(20)

    fmt.Println(&a, c)
    fmt.Println(&b, d)
//  a 存放的是局部函数的地址
//  b也是存放的匿名函数的地址
//a() b()也就是执行匿名函数
// sum相对于匿名函数来说 则是全局变量,所以sum的被保留了


func getStack(name string, ) func(min int) int 
    var sum int = 0

    a := func(min int) int 
        sum += min
        return sum
    
    return a
View Code

 函数里面包含一个匿名函数 函数里面的局部变量相对于匿名函数来说 也是全局变量,它会把这个值保存起来,应该是根据执行函数的地址 来存放起来。

具体的我不是很懂,后期需要继续查资料

数组

数组是一片连续的内存存放同种数据类型的一种容器

如下就是开辟可以放五个整型的数组

技术图片
package main

import "fmt"

func main() 

    var array [5]int = [5]int 1,2,3,4,5

    fmt.Println(array)
View Code

打印的结果为 1 2 3 4 5

数组可以放任何类型 包含复合后面 指针都可以

技术图片
package main

import "fmt"

func main() 

    a := 1
    b := 2
    c := 3
    d := 4
    e := 5

    var parray [5]* int = [5]*int&a,&b,&c,&d,&e

    fmt.Println(parray)
View Code

打印a b c d e 的地址

 

goweb编程实战----数据类型(代码片段)

...类型从指定范围生成切片重置切片直接声明切片Map前言Go语言数据类型包括布尔型、数字类型、字符串类型、复合类型这4种。其中复合类型又分为:数组类型、切片类型、Map类型以及结构体类型。布尔型与其他编程语言一样&... 查看详情

go语言|03数组指针切片用法(代码片段)

文章目录Go语言数组声明数组访问数组元素多维数组Go语言指针如何使用指针指针数组指向指针的指针指针作为函数参数Go语言切片(Slice)定义切片切片初始化len()和cap()函数切片截取append()和copy()函数Go语言数组Go语言提供了数组类... 查看详情

go语言入门三部曲:能看懂go语言(代码片段)

文章目录三部曲搭建环境代码简要讲解包导入导出名标识符关键字和预定义标识符基本类型变量与常量变量声明短变量声明类型转换常量流程控制for循环if分支switch分支defer高级结构指针结构体数组切片切片的底层切片的默认行... 查看详情

go语言|03数组指针切片用法(代码片段)

文章目录Go语言数组声明数组访问数组元素多维数组Go语言指针如何使用指针指针数组指向指针的指针指针作为函数参数Go语言切片(Slice)定义切片切片初始化len()和cap()函数切片截取append()和copy()函数Go语言数组Go语言提供了数组类... 查看详情

go入门学习理解区分数组和切片(代码片段)

一、前言  学过Go的都知道在Go语言中有四种复合数据类型:数组、切片(Slice)、哈希表(Map)和结构体(Struct),而很多Go初学者也很容易把数组和切片弄混淆,所以要怎么把这两个数据类型分清楚呢?    二、数... 查看详情

go语言入门——数组切片和映射(代码片段)

按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始”但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了。  1、简介 Go是什么?Go(又称Golan... 查看详情

go语言之字符串指针数组切片(代码片段)

一:字符串概述:Go语言将字符串作为种原生的基本数据类型,字符串的初始化可以使用字符串字面量。(1)字符串是常量,可以通过类数组索引访问其字节单元,但是不能修改某个字节的值(2〕宇符串转换为切片[]byte(要慎用... 查看详情

go语言数组和切片的区别(代码片段)

原文链接:Go语言数组和切片的区别在Go语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。另外,这个问题在面试中也经常会被问到,属于入门级题目,看过文章之后,... 查看详情

goweb编程实战----数据类型(代码片段)

...类型从指定范围生成切片重置切片直接声明切片Map前言Go语言数据类型包括布尔型、数字类型、字符串类型、复合类型这4种。其中复合类型又分为:数组类型、切片类型、Map类型以及结构体类型。布尔型与其他编程语言一样&... 查看详情

go语言入门篇-高级数据类型

一。数组类型二。切片类型切片的更多操作方法示例:三。字典类型四。通道类型示例:通道的更多种类示例:五。函数mooc  查看详情

go---基础使用(代码片段)

目录Go语言基础1.helloword1.1执行方法:2.变量2.1声明变量的三种方式2.1.1.全定义2.1.2类型推导(自动推导出变量类型)2.1.3简略声明附加1:只定义变量,不赋值附加2:声明多个变量附加3:变量不能重复定义变量:总结3.变量类型3.1... 查看详情

go语言学习-数组-切片-map(代码片段)

数组go语言中数组的特点:数组的长度是固定的,并且长度也是数组类型的一部分是值类型,在赋值或者作为参数传递时,会复制整个数组,而不是指针定义数组的语法:vararr1=[5]int1,2//[5]int1,2,0,0,0未初始化的值,就默认初始化为该... 查看详情

golang-指针与引用(代码片段)

...是值传递吗?都需要用户进行指针传递吗,其实不然,对于Go语言,虽然有指针,但是其也有引用传递.是不是很绕,因为引用传递就是指针传递哇.我们继续解释.概念在Go语言中,对于布尔变量或数值类型或字符串类型或数组以及struct都... 查看详情

go语言入门到放弃-变量(代码片段)

变量1.变量声明使用关键字varvarv1int//整型varv2string//字符串varv3[10]int//数组varv4[]int//数组切片varv5struct//结构体fintvarv6*int//指针varv7map[string]//map,key为string类型,value为int类型还有一种用法就是将若干个需要声明的变量放置在一起var(v... 查看详情

go语言入门数组和切片(代码片段)

数组和切片数组定义:同一类型的元素集合vara[3]int//定义一个数组,数组的下标是从0开始,长度为n的数组下标的有效范围是0到n-1funcarraySet()vara[6]inta[0]=1a[1]=2fmt.Printf("arrayis%v",a)varb[3]int=[3]int1,2,3fmt.Println(b)c:=[...]int1,3,4fmt.Println(c)d:... 查看详情

go语言数组和切片(代码片段)

数组和C语言一样,Go语言中也有数组的概念,Go语言中的数组也是用于保存一组相同类型的数据和C语言一样,Go语言中的数组也分为一维数组和多维数组一维数组格式:vararr[元素个数]数据类型和C语言中数组不同,Go语言中数组定义之后... 查看详情

go语言容器—数组切片(代码片段)

文章目录一、Go语言数组1.1数组的概念1.2多维数组二、Go语言切片2.1切片的概念2.2切片语法说明2.3使用演示2.4多维切片一、Go语言数组1.1数组的概念语法说明var数组变量名[元素数量]Type元素数量:必须在编译器就能够确定Type:可以是... 查看详情

go急速入门系列(代码片段)

...点常量iotaETC......位运算输入与输出(键盘)条件语言循环goto随机数生成复合类型数组切片说明本文档为本人的学习笔记,里面的内容并不适合纯零基础的朋友学习,建议至少掌握了python,java,至少会C 查看详情