Golang语言循环、指针、结构体和切片(打卡✏️第二天)|Go主题月(下)

简介: Go 语言循环语句 for循环是一个循环控制结构,可以执行指定次数的循环。

数组



数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。


声明数组


var variable_name [SIZE] variable_type
var balance [10] float32
fmt.Println(balance) //[0 0 0 0 0 0 0 0 0 0]


初始化数组


var balance =[5]int{1,2,4,5,7}
balance:=[5]int{1,2,4,5,7} //字面量


数组推断



如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度


person:=[...]string{"詹","躲躲"}
fmt.Println(person) //[詹 躲躲]

初始化数组中 {} 中的元素个数不能大于 [] 中的数字。


var i [10]int
fmt.Println(i) //[0 0 0 0 0 0 0 0 0 0]

将索引为 1 和 3 的元素初始化


arr:=[10]string{1:"詹",3:"躲躲"}
fmt.Println(arr) //[ 詹  躲躲      ]


多维数组



三维数组


var threedim [2][3][4]int
fmt.Println(threedim) //[[[0 0 0 0] [0 0 0 0] [0 0 0 0]] [[0 0 0 0] [0 0 0 0] [0 0 0 0]]]
arr:=[][]int{}
row1:=[]int{1,2,3}
row2:=[]int{4,5,6}
arr = append(arr,row1)
arr = append(arr,row2)
fmt.Println(arr[0]) //[1,2,3]
fmt.Println(arr[1]) //[4,5,6]


初始化二维数组


a:=[3][4]int{
    {1,2,3,5},
    {1,2,3,5},
    {1,2,3,5},
}
fmt.Println(a) //[[1 2 3 5] [1 2 3 5] [1 2 3 5]]
数组5行2列
arr:=[5][2]int{{0,0},{1,0},{0,2},{0,2},{1,1}}
var i,j int
for i=0;i<5;i++{
    for j=0;j<2;j++{
        fmt.Printf("数组元素arr[i][j]:%d\n",i,j,arr[i][j])
    }
}
%!(EXTRA int=0, int=0)数组元素arr[i][j]:0
%!(EXTRA int=1, int=0)数组元素arr[i][j]:1
%!(EXTRA int=0, int=1)数组元素arr[i][j]:1
%!(EXTRA int=1, int=0)数组元素arr[i][j]:2
%!(EXTRA int=0, int=0)数组元素arr[i][j]:2
%!(EXTRA int=1, int=2)数组元素arr[i][j]:3
%!(EXTRA int=0, int=0)数组元素arr[i][j]:3
%!(EXTRA int=1, int=2)数组元素arr[i][j]:4
%!(EXTRA int=0, int=1)数组元素arr[i][j]:4
%!(EXTRA int=1, int=1)


指针



Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址

一个指针变量指向了一个值的内存地址。


var a int =20 //实际变量
var b *int //指针变量

指针变量的存储地址


b = &a  
 fmt.Printf("指针变量的地址:%x",b) //指针变量的地址:c000016098


空指针



var  ptr *int
 fmt.Printf("ptr 的值为 : %x\n", ptr  )


语言结构体



Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。


结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。


定义结构体


结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。

type Person struct{
    name string
    age int
    sex string
    id string
}
fmt.Println(Person{"詹躲躲",19,"男","2133321321"}) //{詹躲躲 19 男 2133321321}
fmt.Println(Person{name:"詹躲躲",age:19,sex:"男",id:"2133321321"}) //{詹躲躲 19 男 2133321321}


忽略字段



fmt.Println(Person{name:"詹躲躲",age:19}) //{詹躲躲 19}


访问结构体成员



type Person struct{
    name string
    age int
    sex string
    id string
}
var person Person
person.name = "许嵩"
fmt.Println(person) //{许嵩 0  }


结构体作为函数参数


var person1 Person
person1.name = "许巍"
var person2 Person
person2.name="赵雷"
printStruct(person1) //结构体的数据:许巍
printStruct(person2) //结构体的数据:赵雷
type Person struct{
    name string
    age int
    sex string
    id string
}
func printStruct(person Person){
    fmt.Printf("结构体的数据:%s",person.name) 
}


结构体指针


var person1 Person
person1.name = "许巍"
var person2 Person
person2.name="赵雷"
printStruct(&person1) //结构体的数据:许巍
printStruct(&person2) //结构体的数据:赵雷
type Person struct{
    name string
    age int
    sex string
    id string
}
func printStruct(person *Person){
    fmt.Printf("结构体的数据:%s",person.name) 
}


语言切片



切片是对数组的抽象。


切片初始化


a:=[]int{1,2,3} //[1 2 3]
b:=a[:] //[1 2 3]
fmt.Println(a,b)

使用make

a:=make([]int,3,5)
fmt.Println(a) //[0 0 0]
len() 方法获取长度
cap() 可以测量切片最长可以达到多少
a:=[8]int{1,2,3,4,5,6,7,8}
fmt.Println(len(a),cap(a)) //8 8


空的切片


var a []int
if(a==nil){
    fmt.Println("空的切片")
}


切片截取


a:=[8]int{1,2,3,4,5,6,7,8}
fmt.Println("原始大小",a) //[1,2,3,4,5,6,7,8]
fmt.Println("1-4(不包含4)",a[1:4]) //2,3,4
fmt.Println("0-4(不包含4)",a[:4]) //[1,2,3,4]
fmt.Println("4以后的",a[4:]) //5,6,7,8
append()  copy() 函数
var numbers []int
numbers = append(numbers,1)
numbers1:=make([]int,len(numbers),(cap(numbers))*2)
copy(numbers1,numbers)
fmt.Println(numbers) //[1]


范围(Range)


a:=[5]int{1,2,3,4,5}
for i,j :=range a{
    fmt.Println(i,j) //0 1    1 2    2 3    3 4    4 5
}

枚举字符串


for i,j :=range "asdsada"{
    fmt.Println(i,j) //0 97    1 115 2 100    3 115 4 97    5 100 6 97
}

range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身


元气满满的一天。明天继续打卡,继续开启GO之旅。

相关文章
|
6月前
|
Java 编译器 Go
【Golang】(1)Go的运行流程步骤与包的概念
初次上手Go语言!先来了解它的运行流程吧! 在Go中对包的概念又有怎样不同的见解呢?
334 4
|
6月前
|
Java 编译器 Go
【Golang】(5)Go基础的进阶知识!带你认识迭代器与类型以及声明并使用接口与泛型!
好烦好烦好烦!你是否还在为弄不懂Go中的泛型和接口而烦恼?是否还在苦恼思考迭代器的运行方式和意义?本篇文章将带你了解Go的接口与泛型,还有迭代器的使用,附送类型断言的解释
306 3
|
6月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
342 2
|
6月前
|
存储 Java Go
【Golang】(3)条件判断与循环?切片和数组的关系?映射表与Map?三组关系傻傻分不清?本文带你了解基本的复杂类型与执行判断语句
在Go中,条件控制语句总共有三种if、switch、select。循环只有for,不过for可以充当while使用。如果想要了解这些知识点,初学者进入文章中来感受吧!
242 2
|
8月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
544 0
|
8月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
369 0
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
8月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
516 1
|
8月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
421 0

推荐镜像

更多
下一篇
开通oss服务