Go语言中普通函数与方法的区别分析
作者:books1958 发布时间:2024-02-08 18:02:23
标签:Go语言,函数,方法,区别
本文实例分析了Go语言中普通函数与方法的区别。分享给大家供大家参考。具体分析如下:
1.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。
2.对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。
以下为简单示例:
package structTest
//普通函数与方法的区别(在接收者分别为值类型和指针类型的时候)
//Date:2014-4-3 10:00:07
import (
"fmt"
)
func StructTest06Base() {
structTest0601()
structTest0602()
}
//1.普通函数
//接收值类型参数的函数
func valueIntTest(a int) int {
return a + 10
}
//接收指针类型参数的函数
func pointerIntTest(a *int) int {
return *a + 10
}
func structTest0601() {
a := 2
fmt.Println("valueIntTest:", valueIntTest(a))
//函数的参数为值类型,则不能直接将指针作为参数传递
//fmt.Println("valueIntTest:", valueIntTest(&a))
//compile error: cannot use &a (type *int) as type int in function argument
b := 5
fmt.Println("pointerIntTest:", pointerIntTest(&b))
//同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递
//fmt.Println("pointerIntTest:", pointerIntTest(b))
//compile error:cannot use b (type int) as type *int in function argument
}
//2.方法
type PersonD struct {
id int
name string
}
//接收者为值类型
func (p PersonD) valueShowName() {
fmt.Println(p.name)
}
//接收者为指针类型
func (p *PersonD) pointShowName() {
fmt.Println(p.name)
}
func structTest0602() {
//值类型调用方法
personValue := PersonD{101, "Will Smith"}
personValue.valueShowName()
personValue.pointShowName()
//指针类型调用方法
personPointer := &PersonD{102, "Paul Tony"}
personPointer.valueShowName()
personPointer.pointShowName()
//与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用
}
希望本文所述对大家的Go语言程序设计有所帮助。


猜你喜欢
- 如下所示:import ospath="/home/test/" #待读取的文件夹path_list=os.listdi
- 需求:请求接口之后,缓存当前接口的数据,下次请求同一接口时拿缓存数据,不再重新请求添加缓存失效时间cache使用map来实现ES6 模块与
- 安装完 Oracle11g 之后,想打开自带的 SQL Plus 来学习,然后按照提示用 sys 用户来连接数据库,可输了好几次都提示一个错
- def get_seed_data(filename):dom = minidom.parse(filename)root = dom.do
- 因为虽然名字很陌生,但我们每天都在用,每天都有无数潜在的坑被埋下。包括我本人也犯过同样的错误,当时代码已经合并并发布了,当我意识到出了什么问
- 一、Pytorch创建张量的4种方法Pytorch创建张量的4种方法主要有:torch.Tensor()、torch.tensor()、to
- 在Python中os模块里,os.renames() 方法用于递归重命名目录或文件。类似rename()。rename()方法语法格式如下:
- 先看map()函数底层封装介绍:注释中翻译为:map(func, *iterables)——> map对象创建一个迭代器,使用来自的参
- 下面和大家分享一下具体的实现过程。HTML标签结构:<ul class="animation_menu">&
- 问题描述:已经用pip install jieba安装好jieba分词工具,但是在Jupyter 里import jieba运行一直提示Im
- 我看过一篇关于程序员写博客的文章,他说很多的程序员过了两年写了很多的代码,但是回想起来自己具体做了哪些技术点,遇到坑几乎没有印象,所以说文字
- 一. lamda匿名函数为了解决一些简单的需求而设计的一句话函数# 计算n的n次方def func(n): return n**nprint
- 如下所示:f=file('a.txt')for eachline in f: print eachline来源:https:
- 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取
- 前言接上文 matlab与Excel交互 非xlsread和xlswrite (1) ,此处默认:Excel=actxserver(‘Exc
- 一.脚本基础1.USE语句设置当前数据库。2.声明变量语法:DECLARE @变量名 变量类型在声明变量后,给变量赋值之前,变量的值为NUL
- 下载git客户端 FileàDefault Settingà Version Controlà GitPath to Git ex
- 有开发的同事反映远程登录SQL Server操作报错,索引超出了数组界限等如下图线上数据库版本为SQL Server2012 R2,检查后发
- 不同的数字之间使用 空格“ ”,“$”,"*"等隔开,支持带小数点的字符串NumArray=str2num(LineSt
- 1.安装python windows版本好:python-2.5.1.msi2.安装pycrypto windows版本号:py