Go 学习笔记06.指针、结构体、方法、接口 2023-05-22 16:50 3阅读 0赞 ## 指针 ## 如果i是变量,通过 `&i` 语法来取得 `i` 的内存地址 如果i是指针,通过`*i` 语法来取得 `i`的值 package main import "fmt" // 一个函数,接收的是数据类型 // 一个函数,接收的是数据类型的指针 // 接收到参数后,将参数值重新赋值,在从外面调用 // 发现普通的不会改变值,因为在不同的作用域内 // 而传递指针的,会改变值,因为操作的是内存地址 func zeroval(ival int) { ival = 0 } func zeroptr(iptr *int) { *iptr = 0 } func main() { i := 1 fmt.Println("initial:", i) zeroval(i) fmt.Println("zeroval:", i) zeroptr(&i) fmt.Println("zeroptr:", i) // 打印指针 fmt.Println("pointer:", &i) } ## 结构体 ## 这篇教程不错 https://www.cnblogs.com/haiguixiansheng/p/10613754.html package main import "fmt" // 这里的 `person` 结构体包含了 `name` 和 `age` 两个字段。 type person struct { name string age int } func main() { // 使用这个语法创建了一个新的结构体元素。 fmt.Println(person{ "Bob", 20}) // 你可以在初始化一个结构体元素时指定字段名字。 fmt.Println(person{ name: "Alice", age: 30}) // 省略的字段将被初始化为零值。 fmt.Println(person{ name: "Fred"}) // `&` 前缀生成一个结构体指针。 fmt.Println(&person{ name: "Ann", age: 40}) // 使用点来访问结构体字段。 s := person{ name: "Sean", age: 50} fmt.Println(s.name) // 也可以对结构体指针使用`.` - 指针会被自动解引用。 sp := &s fmt.Println(sp.age) // 结构体是可变的。 sp.age = 51 fmt.Println(sp.age) } ## 方法 ## 可以把结构体想象成一个类,这个方法区别于函数,属于类的函数 叫方法。 package main import "fmt" // 定义结构体 type rect struct { width int height int } // 定义结构体的方法 面积 // 方法名叫area,返回值为int // 这个接收的是一个指针 func (r *rect) area() int { return r.width * r.height } // 这个接收的是值,会有数据拷贝,其方法内的操作不会影响外面 func (r rect) perim() int { return 2*r.width + 2*r.height } func main() { r := rect{ width: 10, height: 5} fmt.Println("area: ", r.area()) fmt.Println("perim:", r.perim()) rp := &r fmt.Println("area: ", rp.area()) fmt.Println("perim:", rp.perim()) } area: 50 perim: 30 area: 50 perim: 30 **值类型的变量和指针类型的变量 区别** https://www.cnblogs.com/zlingh/p/5701785.html ## 接口 ## package main import "fmt" import "math" // 这里是一个几何体的基本接口。 // 把几何体的方法都罗列出来 type geometry interface { area() float64 perim() float64 } // 矩形 结构体 type square struct { width, height float64 } // 圆形 结构体 type circle struct { radius float64 } // 定义矩形结构体的方法 func (s square) area() float64 { return s.width * s.height } func (s square) perim() float64 { return 2*s.width + 2*s.height } // 定义圆形结构体的方法 func (c circle) area() float64 { return math.Pi * c.radius * c.radius } func (c circle) perim() float64 { return 2 * math.Pi * c.radius } // 将接口当做参数,传入到measure函数中,类型是geometry,形参是g // 我们实际传入的是结构体的实例 // 接口定义了一些方法名,这个实例也实现了对应的方法名 // 在函数中,就可以直接调用了 func measure(g geometry) { fmt.Println(g) fmt.Println(g.area()) fmt.Println(g.perim()) } func main() { // 创建结构体实例 s := square{ width: 3, height: 4} c := circle{ radius: 5} // 执行函数 measure(s) measure(c) } 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 go结构体方法实战 一 需求 1 编写结构体(MethodUtils),编写一个方法,方法不需要参数,在方法中打印一个 10\8 的矩形,在 main 方法中调用该方法。 2 编写一个方法 系统管理员/ 2021年07月24日 21:38/ 0 赞/ 326 阅读
相关 Go语言基础之结构体、接口 package main import ( "fmt" ) 定义Human类型的接口必须实现xx和toS. 偏执的太偏执、/ 2021年11月14日 07:22/ 0 赞/ 173 阅读
相关 go学习笔记(3结构体) 转载:[http://www.runoob.com/go/go-structures.html][http_www.runoob.com_go_go-structures.ht 女爷i/ 2022年02月26日 01:58/ 0 赞/ 64 阅读
相关 Go学习(9):结构体 一、结构体 1.1 什么是结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。 结构体是由一系列具有相同类型或不同类 亦凉/ 2022年04月18日 14:09/ 0 赞/ 71 阅读
相关 GO语言笔记--结构体 1.说明 1)go中的struct与C中的struct非常相似,并且go没有class 2)使用type <Name> struct \{\}定义结构,名称遵循可见性规 旧城等待,/ 2022年04月25日 12:58/ 0 赞/ 79 阅读
相关 GO学习笔记(结构体) go 可以像c 语言一样使用struct 定义结构体 > go 结构体定义和使用 type cat struct { // 结构体内容 素颜马尾好姑娘i/ 2022年05月27日 20:37/ 0 赞/ 68 阅读
相关 Golang学习笔记 结构体和指针 Golang是一门很特殊的语言,虽然它出生比较晚,但是在很多地方却和现在的编程语言有所不同。现在的编程语言要么是函数式的、要么是面向对象的,而Go语言却有指针、结构体这些概念, 清疚/ 2022年06月13日 13:42/ 0 赞/ 67 阅读
相关 【Go基础】结构体、方法封装、结构体内嵌、接口 结构体、方法封装、结构体内嵌、接口 结构体、方法封装、结构体内嵌、接口 结构体 定义结构体 男娘i/ 2022年09月03日 22:25/ 0 赞/ 45 阅读
相关 Go 学习笔记 08 | 结构体详解 一、结构体 实例化结构体 第一种实例化结构体:var 变量 结构体 package main import ( "fmt" 分手后的思念是犯贱/ 2022年12月23日 11:52/ 0 赞/ 45 阅读
相关 Go 学习笔记06.指针、结构体、方法、接口 指针 如果i是变量,通过 `&i` 语法来取得 `i` 的内存地址 如果i是指针,通过`i` 语法来取得 `i`的值 package main 朱雀/ 2023年05月22日 16:50/ 0 赞/ 4 阅读
还没有评论,来说两句吧...