golang指针和结构体

指针
image-20240220214720736
指针操作
  • 指针包括指针地址、指针类型和指针取值

  • &: &符号放在变量前面进行取地址操作

  • **:*放在变量前面根据地址进行取值

指针地址:
func main() {

	var a int = 1
	// a的值是1--类型是int--,地址是0xc0000120c0,&是地址符号
	fmt.Printf("a的值是%v--类型是%T--,地址是%p \n", a, a, &a)

	// 指针变量:指针一种特殊的变量,存储的数据是另一个变量的地址
	// 值类型的数据都有对应的指针类型,例如*int、*int64、*string 等
	var b = &a
	// b的值是0xc0000120c0--类型是*int--,地址是0xc000056028
	// *int:int的指针类型,*代表指针
	// go中所有的变量都有自己的内存地址,指针变量也有自己的地址
	fmt.Printf("b的值是%v--类型是%T--,地址是%p \n", b, b, &b)

}
指针取值:
a := 1

	b := &a // 指针变量
	// // b的值是a的内存地址,通过*b打印该内存地址对应的值,也就是a的值
	fmt.Println(*b) // 1

	//通过内存地址改变值
	*b = 3
	fmt.Println(a) //3
make和new

所有的引用数据类型必须要分配内存空间才能赋值使用,指针也是引用数据类型

new:

new是一个内置函数,作用是动态地分配内存,返回该指针的地址,值是对应类型指针的零值

// new 的参数就是数据类型,得到的是一个对应的零值的指针
	var num = new(bool)
	fmt.Println(num)         // 0xc00009e012
	fmt.Printf("%T \n", num) // *bool
	fmt.Println(*num)        // false
	*num = true
	fmt.Println(*num) // true

make:

image-20240220222442955

make和new的区别:

  • make 只用于 slice、map 以及 channel 的初始化,返回的还是这三个引用类型本身

  • new 用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针

结构体

Golang 中没有“类”的概念,Golang 中的结构体和其他语言中的类有点相似。和其他面向对

象语言中的类相比,Golang 中的结构体具有更高的扩展性和灵活性。

Golang 中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全

部或部分属性时,这时候再用单一的基本数据类型就无法满足需求了,Golang 提供了一种

自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称 struct。

也就是我们可以通过 struct 来定义自己的类型

类型别名:
// 自定义类型
type myInt int


// 类型别名 通过赋值给类型取一个别名
type myFloat = float64

func main() {
	var a myInt = 1
	var b myFloat = 3.14

	//区别在于一个类型是自定义的类型,一个还是原类型
	fmt.Printf("%T \n", a) // main.myInt 

	fmt.Printf("%T", b) // float64

}
结构体定义

类型名:表示自定义结构体的名称,在同一个包内不能重复。

字段名:表示结构体字段名。结构体中的字段名必须唯一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值