Go中使用*号表示指针,但是没有指针算数,不能对其进行加减。同时内存管理都由Go来负责,不需要拖动释放内存。

Go中的函数接收者,可以为值类型,也可以是引用类型。

看代码:

package main

import (

"fmt"

)

type Rect struct {

X, Y,Area,Length float64

}

func (r *Rect) CalArea() {

r.Area = r.X*r.Y

}

func (r Rect) CalLength() {

r.Length = *(r.X+r.Y)

}

func main() {

r1 := Rect{, , , }

r1.CalArea()

r1.CalLength()

fmt.Println(r1.Area)

fmt.Println(r1.Length)

r2 := &Rect{, , , }

r2.CalArea()

r2.CalLength()

fmt.Println(r2.Area)

fmt.Println(r2.Length)

}

运行结果:

12

0

12

0

可以直接在这里查看代码运行情况:

http://play.golang.org/p/ZleGPoyuEp

从上面的代码中可以看出:

1、Go中函数接收器可以理解为函数的一个参数,如果传的是引用,就可以改变调用函数中的值。

2、除了接收器中需要使用*来表明指针,在调用函数和被调用函数中*号和&符号均不是必须的,Go会在调用函数和使用参数时时根据接收器做转换。

Go中的指针与函数接收器的更多相关文章

  1. c++ 子类,基类 中this指针 虚函数使用

    笔记: 子类和基类 构造函数不显式时,的this指针相同..在QT中,如果父类基于QObject,那么构造子类时传入this指针,这样所有子类,父类,基类都是同一地址.delelater(),会del ...

  2. 在实验中观察指针——C++ 函数参数的压栈顺序

    前言 好久没写东西了,突发奇想,写写函数参数的压栈顺序 先看看这个问题 https://q.cnblogs.com/q/137133/ 然后看我简化的代码,猜输出结果是多少? #include< ...

  3. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  4. C语言中的声明解析规则——数组,指针与函数

    摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...

  5. C++中的函数指针和函数对象总结

    篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址.函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数. ...

  6. 深入理解JS函数中this指针的指向

    函数在执行时,会在函数体内部自动生成一个this指针.谁直接调用产生这个this指针的函数,this就指向谁. 怎么理解指向呢,我认为指向就是等于.例如直接在js中输入下面的等式: console.l ...

  7. C++中的指针,指针函数和函数指针

    指针是C或C++中的一大难题,因此弄懂指针对C和C++的学习有很大的帮助,最近一直在研究指针,因此写一篇随笔把心得记录一下. 简单来说指针也是一种变量,只不过指针变量所存储的不是我们直观上看到的,而是 ...

  8. C指针(2)——指针在函数中的应用(程序讲解)

    3-1.c指针用作函数参数 #include<stdio.h> typedef unsigned char uint8_t; //类型自定义,通过typedef语句重新把unsigned ...

  9. C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数

    1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...

随机推荐

  1. 酒鬼-DP

    Description Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅.今天,他来到这个大客厅欣赏他的奖品.房东摆出了一行瓶子在酒吧上.瓶子里都装有不同体积的酒.令Santo高 ...

  2. 避免使用CreateThread函数,导致的内存泄露

    原文链接:http://blog.csdn.net/solosure/article/details/6262877

  3. Windows server 2008R2部署服务批量安装Windows7教程

    利用Windows server 2008 R2下的Windows部署服务可以批量安装Windows 7,以下简称WDS. WDS需要用到域和dhcp.DNS服务,所以,基础环境必须要有域控制器,dh ...

  4. leetcode 112

    112. Path Sum Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that ...

  5. javaSE第十九天

    第十九天    227 1:异常(理解)    227 (1) 定义    227 a)异常的引入    227 (2)异常的体系    228 (3)异常的处理:    229 A:JVM的默认处理 ...

  6. JAVA编程思想第一题出现错误

    //: object/E01_DefaultInitialization.java public class E01_DefaultInitialization{ int i ; char c ; p ...

  7. SQL中迁移sql用户及密码脚本

    SQL中迁移sql用户及密码脚本   编写人:CC阿爸 2014-6-20 在日常SQL数据库的操作中,常常需要迁移数据库或重装服务器,这时候,一些之前建立的login账户,必须重新建立,以下可以通过 ...

  8. sprintf函数减少字符串拼接错误

    $return_string=""; foreach($cat_list as $value){ $return_string .= sprintf('<dd>< ...

  9. win7防火墙打不开(无法启动windows firewall服务)

    点击windows 7控制面板中防火墙的“推荐配置”没有反应:打开“服务”,无法启动windows firewall,并报错.  可能很多的win7用户都碰到过这样的一种情况,那就是win7的防火墙打 ...

  10. redis 配置文件解读

    # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => 1000 bytes # 1kb = ...