Go的方法接收: 值接收与指针接收

2023-03-04 19:09:57 439

package main

import "fmt"

type Circle struct {
	r uint
}

func (c *Circle) add() uint {
	c.r++
	return c.r
}

func (c Circle) show() uint {
	c.r++
	return c.r
}

func main() {
	c := Circle{1}
	fmt.Printf("result: %d\n", c.show())
	fmt.Printf("result: %d\n", c.add())
}

output

result: 2 result: 2
package main

import "fmt"

type Circle struct {
	r uint
}

func add(c *Circle) uint {
	c.r++
	return c.r
}

func show(c Circle) uint {
	c.r++
	return c.r
}

func main() {
	c := Circle{1}
	fmt.Printf("result: %d\n", show(c))
	fmt.Printf("result: %d\n", add(&c))
}

output

result: 2result: 2

在Go或C++等很多面向对象的编程语言中, 对象方法的第一个参数的类型就是当前对象指针

在Go中, 参数是值传递的, 指针的值传递只是地址的拷贝, 而对象则要拷贝内部的所有属性, 存在一定的性能消耗, 且由于方法内部操作的是拷贝对象, 对原对象不会有任何影响


简易Mac历史剪切板

简易Mac历史剪切板

基于go-fyne, 自动存储剪切板历史记录 (只支持文本)main.gopackage main import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/d
2024-11-28

Gin框架集成Zap日志库

在go语言gin框架中,日志是默认输出到终端的,但是我们在实际工作中,一般来说是需要记录服务器日志的。而最常用的日志库就是zap日志库,我们需要将gin在终端输出的内容通过zap日志库记录到文件中假设你已配置好了Gin/ZapginDefault := gin.New() ginDefault.Us
2023-03-22

Ubuntu Golang 编译 + Docker部署

配置Golang编译环境下载go环境 https://studygolang.com/dl 选择go1.20.2.linux-amd64.tar.gztar -zxvf go1.20.2.linux-amd64.tar.gz 解压到 /usr/local/go创建 /usr/local/go-pat
2023-03-22

Go的方法接收: 值接收与指针接收

package main import "fmt" type Circle struct { r uint } func (c *Circle) add() uint { c.r++ return c.r } func (c Circle) show() uint { c.r++
2023-03-04

快速上手Go以及实战Gin+Gorm

阅读本文需要一定的java开发经验以及一点c/c++的基础语法特性变量命名一般是名称在前, 类型在后匿名变量使用_标记忽略常量使用 const, 例const c_name1, c_name2 = value1, value2. 关键字: iota, 索引自增进行初始化常量package main
2022-12-20

解决GoLand无法Debug

go 1.20rc1goland 2022.2.3无法进行debug控制台提示WARNING: undefined behavior - version of Delve is too old for Go version 1.20.-1 (maximum supported version 1.1
2022-12-14

freemarker 时间显示不正常 设置时区

项目在本地开发的时候显示正常,部署上服务器就一直差8个小时,最后发现freemarker官方文档有这样的说明time_zone:时区的名称来显示并格式化时间。 默认情况下,使用JVM的时区。 也可以是 Java 时区 API 接受的值,或者 "JVM default" (从 FreeMarker 2
2020-03-28
IDEA 2019.1 xml 不高亮

IDEA 2019.1 xml 不高亮

前几天更新了idea后,发现xml里的代码都没有了高亮,变得跟记事本一个德性了打开setting ,搜索 File Types,找到xml项, 查看下方的匹配格式,果然没有xml,(idea真是厉害)点击右方的+,输入*.xml,点击ok,解决问题
2020-03-28

npm install 淘宝镜像

npm install --registry=https://registry.npm.taobao.org
2020-03-28
Java中方法的参数传递机制

Java中方法的参数传递机制

来看一段代码 public class Man { private String name; private Integer age; public String getName() { return name; } publi
2020-03-28
基于自定义注解手写权限控制

基于自定义注解手写权限控制

方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-w
2020-03-28

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

SpringBoot 启动普通java工程

引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2020-03-28

Vue.js DOM操作

<template> <input type="button" @click="reply($event)" value="回复"> </template> export default { methods: { replyFun(e) {
2020-03-29
CentOS7编译调试OpenJDK12

CentOS7编译调试OpenJDK12

1. 下载源码https://hg.openjdk.java.net/jdk/jdk12点击左侧的browse,再点击zip,就可以下载zip格式的源码压缩包。unzip xxx.zip 解压文件2. 安装jdkyum install java-11-openjdk-devel -y3. 运行con
2020-04-23
编写自己的Spring Boot Starter

编写自己的Spring Boot Starter

1.新建一个maven项目命名规则统一是xxx-spring-boot-starter完整pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
2020-06-29