首页 > 其他分享 >Go语言方法

Go语言方法

时间:2022-08-26 02:02:29浏览次数:40  
标签:Println Name fmt name go Go main 方法 语言

Go语言方法

两种接收者

Go语言方法有他的接收者,如下代码

package main

import "fmt"

type A struct {
	name string
}

func (a A) Name() string {
	a.name = "hi" + a.name
	return a.name
}

func main() {
	a := A{
		name:"ymk",
	}
	fmt.Println(a.Name())
	fmt.Println(A.Name(a))
	fmt.Println(a.name)

这段代码中,Name方法的接收者是A结构体的变量。方法接收者其实就是方法的一个参数,所以这里a.Name()与A.Name(a)是等价的运行后,的效果如下

PS D:\chengxu\test\go> go run .\main.go
hiymk
hiymk
ymk

因为这里a是值传递,因此在Name方法里改变a.name并不会影响实际的a。

如果将方法改写,这里方法的接收者是指针值,因此a会受影响

func (a *A) Name() string {
	a.name = "hi" + a.name
	return a.name
}

func main() {
	a := A{
		name:"ymk",
	}
	fmt.Println(a.Name())
	fmt.Println((*A).Name(&a))
	fmt.Println(a.name)
}
PS D:\chengxu\test\go> go run .\main.go
hiymk
hihiymk
hihiymk

将一个类型的方法赋给一个变量

type A struct {
	name string
}


func (a A) GetName() string {
	return a.name
}

func main() {
	a := A{name:"ymk"}
	f1 := A.GetName
	fmt.Println(f1(a))
	f2 := a.GetName
	a.name = "yyy"
	fmt.Println(f2())
}

执行结果

PS D:\chengxu\test\go> go run .\main.go
ymk
ymk

这里的f1是一个方法表达式,f2是一个方法变量,并且把a捕获进去形成了闭包。他们本质上都是function value

标签:Println,Name,fmt,name,go,Go,main,方法,语言
From: https://www.cnblogs.com/yumingkuan/p/16626320.html

相关文章

  • Go errors All In One
    GoerrorsAllInOnesh:gin:commandnotfoundzshgopath$echo$GOPATH$echo$PATH|grep$GOPATHhttps://github.com/codegangsta/gin/issues/114$co......
  • 控件的点击方法汇总
    首先判断控件是否可以点击?1.控件可点击:找到控件直接点击findOne().click();直接点击控件上的文本信息:click("text",i);2.控件不可点击:(1)找到控件获取其中心位置......
  • 有什么方法可以把js注入到TinyMCE中的iframe?
    WordPress6之前的版本用的都是经典编辑器,而编辑器用的就是TinyMCE,所以我们要改动的主角就是它了。还没改之前觉得挺简单的,真去动手改造的时候,就懵逼了,找了半天没有相关的......
  • 痞子衡嵌入式:MCUXpresso IDE下设置代码编译优化等级的几种方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是MCUXpressoIDE下设置代码编译优化等级的几种方法。最近公司芯片设计团队正在开发一款全新的基......
  • IPv6地址表示方法
    Ipv6:互联网协议第6版Ipv4:互联网协议第6版Ipv4地址表示方法:点分十进制,长度为32位例如:192.168.26.13Ipv6地址表示方法:点分十六进制,长度位128位Ipv4:8位一组,分为4组例如......
  • 贪吃蛇(C语言版)链表实现
    贪吃蛇gitee:贪吃蛇C语言版:Snake蛇的结构typedefstructSnake{ intx; inty; structSnake*next; };游戏开始欢迎界面//游戏开始欢迎界面voidmeun(){ p......
  • 方法
    1.什么是方法方法是解决一类问题的步骤的有序组合。方法包含于类或对象中。方法在程序中创建,在别的地方被引用。原则:一个方法只做一个功能。2.命名规则修饰符返回值......
  • 【前端】第04回 JS功能方法实现
    目录1.JS数据类型之布尔值(boolean)2.JS数据类型之对象(object)3.JS数据类型之自定义对象3.1自定义对象(两种方式)3.2补充4.运算符5.流程控制5.1分支结构5.2循环结......
  • JS数据类型与方法
    JS数据类型与方法JS数据类型之布尔值python布尔值(bool)TrueFalse:0,None,空字符(""),空列表([]),空字典({}),空元组()JS布尔值(boolean)true(不需要首字母大写)......
  • npm 安装依赖包,报错 install: `node-gyp rebuild` 解决方法
    错误现象这是 配置环境变量 的问题核对下 环境变量 NODE_PATHC:\nodejs\node_global\node_modules   ......