GO语言方法
来源:互联网 发布:传智播客7月-8月大数据 编辑:程序博客网 时间:2024/06/14 08:25
方法
Go 没有类。然而,仍然可以在结构体类型上定义方法。
方法接收者 出现在 func 关键字和方法名之间的参数中。
案例一----对象
package mainimport ("fmt""math")type Vertex struct {X, Y float64}func (v *Vertex) Abs() float64 { //指针类型return math.Sqrt(v.X*v.X + v.Y*v.Y)}func main() {v := &Vertex{3, 4}fmt.Println(v.Abs())}案例二----普通类型
package mainimport ("fmt""math")type MyFloat float64func (f MyFloat) Abs() float64 { //值类型if f < 0 {return float64(-f)}return float64(f)}func main() {f := MyFloat(-math.Sqrt2)fmt.Println(f.Abs())}上述定义了2种传递类型参数的方法,一个是在 *Vertex 指针类型上,而另一个在 MyFloat 值类型上。区别如下
1.值类型传递的值只在当前方法上有用
2.指针类型因其传递的是内存地址,所以当在方法中修改结构体中的任意参数值时,会直接作用保存在结构体中。
案例:
package mainimport ("fmt""math")type Vertex struct {X, Y float64}func (v *Vertex) Scale(f float64) {v.X = v.X * fv.Y = v.Y * f}func (v *Vertex) Abs() float64 {return math.Sqrt(v.X*v.X + v.Y*v.Y)}func main() {v := &Vertex{3, 4}fmt.Printf("Before scaling: %+v, Abs: %v\n", v, v.Abs())
v.Scale(5)
//此处调用了修改结构体参数值的方法,当方法关联的v *Vertex为这个指针类型时,v这个对象的值将会被改变,并导致后边的Abs方法输出结果为25。//如果当我们去掉指针*号,那么这个方法所关联的Vertex实际是一个&Vertex{3, 4}的副本
//此时在Scale方法中修改对象的值是无效果的,它不能传递到后边的Abs方法,此时Abs返回的结果还是5fmt.Printf("After scaling: %+v, Abs: %v\n", v, v.Abs())}
阅读全文
0 0
- Go语言-方法
- GO语言方法
- go语言方法调用类型
- 六、go语言一些常用方法--go语言笔记
- Go语言环境搭建方法(Windows)
- Go语言 常用日志记录方法
- Go 语言方法接受者类型的选择
- GO语言学习-方法和接口
- Go 语言方法接受者类型的选择
- 关于Go语言daemon启动的方法.
- go语言解析JSON的方法
- GO语言基础学习------方法_1
- go语言方法Value Receiver, Pointer Receiver
- go语言简单的并行控制方法
- Go语言中字符串的拼装方法
- Go语言fmt包Printf方法详解
- Go语言学习笔记(五)方法
- GO语言面向对象编程之方法
- 理解登陆的业务逻辑
- 基础知识汇总三(BRDF)未完
- 带宽单位KB/s,K/s和kbps
- shell编程-1
- angularJS回车事件
- GO语言方法
- iOS_Pass iOS因关键字,App名字副标题被拒绝
- 爬虫入门-02-爬虫模块介绍
- Java核心技术--数组排序
- 其他设计模式
- BottomSheet的简单使用
- 解决Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
- Liunx的rm -rf怎么老报错mv:无效选项 -- r?
- Revit API 风管对齐