Go 学习笔记06.指针、结构体、方法、接口 2023-05-22 08:50 47阅读 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 学习笔记06.指针、结构体、方法、接口 指针 如果i是变量,通过 `&i` 语法来取得 `i` 的内存地址 如果i是指针,通过`i` 语法来取得 `i`的值 package main 朱雀/ 2023年05月22日 08:50/ 0 赞/ 48 阅读
相关 Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等) 目录 结构体类型(struct) 声明 声明并初始化 结构体指针 方法 Generate 方法和函数的区别 匿名结构体 序列化 全部代码 截图 ---- 刺骨的言语ヽ痛彻心扉/ 2023年01月14日 05:58/ 0 赞/ 57 阅读
相关 C++学习笔记 (一)指针、结构体 (一)指针 1.空指针 int \ p = NULL; 指向内存中编号为0的空间,用来初始化指针变量, 其指向的内存是不可访问的(因为0~255间的内存编号由系统占用) 曾经终败给现在/ 2023年01月04日 14:54/ 0 赞/ 32 阅读
相关 Go 学习笔记 08 | 结构体详解 一、结构体 实例化结构体 第一种实例化结构体:var 变量 结构体 package main import ( "fmt" 分手后的思念是犯贱/ 2022年12月23日 03:52/ 0 赞/ 79 阅读
相关 【Go基础】结构体、方法封装、结构体内嵌、接口 结构体、方法封装、结构体内嵌、接口 结构体、方法封装、结构体内嵌、接口 结构体 定义结构体 男娘i/ 2022年09月03日 14:25/ 0 赞/ 83 阅读
相关 Golang学习笔记 结构体和指针 Golang是一门很特殊的语言,虽然它出生比较晚,但是在很多地方却和现在的编程语言有所不同。现在的编程语言要么是函数式的、要么是面向对象的,而Go语言却有指针、结构体这些概念, 清疚/ 2022年06月13日 05:42/ 0 赞/ 183 阅读
相关 GO学习笔记(结构体) go 可以像c 语言一样使用struct 定义结构体 > go 结构体定义和使用 type cat struct { // 结构体内容 素颜马尾好姑娘i/ 2022年05月27日 12:37/ 0 赞/ 112 阅读
相关 GO语言笔记--结构体 1.说明 1)go中的struct与C中的struct非常相似,并且go没有class 2)使用type <Name> struct \{\}定义结构,名称遵循可见性规 旧城等待,/ 2022年04月25日 04:58/ 0 赞/ 131 阅读
相关 go学习笔记(3结构体) 转载:[http://www.runoob.com/go/go-structures.html][http_www.runoob.com_go_go-structures.ht 女爷i/ 2022年02月25日 17:58/ 0 赞/ 102 阅读
相关 go结构体方法实战 一 需求 1 编写结构体(MethodUtils),编写一个方法,方法不需要参数,在方法中打印一个 10\8 的矩形,在 main 方法中调用该方法。 2 编写一个方法 系统管理员/ 2021年07月24日 13:38/ 0 赞/ 469 阅读
还没有评论,来说两句吧...