一、Go支持指针,允许在程序中通过引用传递值或者数据类型
在这里我们分别创建两个包含值类型和引用类型参数的函数
func zeroval(ival int) {
ival = 0
}
func zeroptr(iptr *int) { *iptr = 0}
上面中,zeroval的参数是值类型,zeroptr的参数是引用类型
那么在这里我们声明一个变量
i := 1
分别的赋值给这两个函数调用看一下效果
i := 1
fmt.Println("initial : " , i) // print 1
zeroval(i)
fmt.Println("initial : " , i) // print 1
zeroptr(&i)
fmt.Println("zeroptr",i) // print 0
fmt.Println("zeroptr_&",&i) // print 0xc000090018
从上面可以看出值类型传递的参数值没有发生改变,依旧是1
而指针类型的参数值则发生了改变
在上面 *i 是创建了一个指针类型,&i 是获取指针的地址中的值,在上面示例中&i取到i的指针地址值
然后在zeroptr函数中将地址的地址的值重新赋予了一下
二、结构体
Go支持一个叫做结构体的类型,相比于java来讲就是实体类
在Go中声明一个结构体使用 type 结构体名称 struct {}
比如:
type person struct {
name string
age int
}
person 结构体包含了 name 和 age 两个字段
结构体的赋值和使用
fmt.Println(person{"bob", 23})
// 初始化一个结构体元素时指定字段名字
fmt.Println(person{name: "alice", age: 18})
// 省略的字段将被初始化为零值
fmt.Println(person{name: "fuck”})
// & 前缀生成一个结构体指针
fmt.Println(&person{name: "bob", age: 23})
三、方法
Go支持在结构体类型中定义方法
方法在func关键字和方法名中间加入了一个特殊的接收器类型,接收器可以是结构体类型或者是非结构体类型
接收器是可以在方法的内部访问的
创建方法的语法:
rect是一个结构体
area() 方法将rect作为一个接收器类型
func (r *rect) area() int {
return r.height + r.width}
r := rect{
width: 10,
height: 12
}
r.area()
fmt.Println("area: ", r.area())
四、接口
在Go语言中,接口 是方法特征的命名集合
声明一个几何体接口
在Go语言中,可以通过type 接口名称 interface 的方式定义接口
在接口中,可以指定多个方法
在方法实现接口时,需要实现接口下面的所有方法
比如
定义一个geometry接口
type geometry interface {
area() float64
perim() float64
}
定义一个rect结构体
type rect struct { width, height float64}
这里rect实现了接口geometry的方法,area和perim
func (r rect) area() float64 { return r.width + r.height}func (r rect) perim() float64 { return 2 * r.width + 2 * r.height}
学习网址:
https://books.studygolang.com
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有