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

相关阅读 >>

Go语言删除文件的方法

国内哪些公司用Go语言

Go语言中的接口怎么写

Go语言的init函数详解

Go语言中如何导入包

Go语言是哪个公司的

Go语言math包中有哪些常用方法

Go语言支持安卓开发吗

Go语言结构体详解

Go语言异常处理的方法介绍

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




打赏

取消

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

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

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

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

评论

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