go语言中普通函数与方法的区别是什么?


本文摘自php中文网,作者青灯夜游,侵删。

区别:对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然;对于方法,接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。

本文操作环境:Windows10系统、Go 1.11.2、thinkpad t480电脑。

相关推荐:《Go视频教程》

Go语言中普通函数与方法的区别

1、对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。

2、对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。

以下为简单示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

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语言中普通函数与方法的区别是什么?的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

mac下怎么安装Go语言

我的第一个go程序:hello.go

Go语言相关工具怎么安装

Go语言常用命令有哪些

Go语言的scan方法有什么用

Go语言适合并发的原因是什么

Go语言如何获取时间戳

Go语言make的用法有哪些

mac电脑怎么安装Go语言环境

Go语言怎么将字符串转换成浮点数

更多相关阅读请进入《Go语言》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...