Why Do Some Go Struct Setters Fail to Modify the Original Struct?
Understanding Setter Behavior for Structs
This article addresses a common misunderstanding encountered when using setter functions for struct types in Go. Despite using a setter function, a struct's value remains unchanged, while a pointer setter function successfully modifies the struct.
Setters Without Pointers
When a struct is passed by value to a function, a copy of the struct is created within the function. As a result, any modifications made to the copied struct within the function are not reflected in the original struct outside the function. This behavior is demonstrated in the following code:
type T struct { Val string } func (t T) SetVal(s string) { t.Val = s }
In this example, the SetVal function is defined as a method of T without a pointer receiver. When you call SetVal on a struct v, a copy of v is created within the function, and any changes made to the copy do not affect the original struct v. This is because passing a value by value creates a completely new object.
Setters With Pointers
Conversely, when a struct is passed by reference using a pointer receiver, the function receives a pointer to the original struct, enabling modifications to the actual struct outside the function. This behavior is illustrated in the following code:
func (t *T) SetVal2(s string) { (*t).Val = s }
In this example, SetVal2 is defined as a method of T with a pointer receiver. When you call SetVal2 on a struct pointer, the function receives a pointer to the original struct, and any changes made to the struct within the function affect the original struct outside the function. This is because passing a pointer by reference shares the address of the same object.
Conclusion
The distinction between passing a struct by value and passing a struct pointer as an argument is crucial when understanding the behavior of setter functions for structs in Go. By recognizing the difference, you can effectively modify structs through setter functions as intended.
The above is the detailed content of Why Do Some Go Struct Setters Fail to Modify the Original Struct?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



OpenSSL, as an open source library widely used in secure communications, provides encryption algorithms, keys and certificate management functions. However, there are some known security vulnerabilities in its historical version, some of which are extremely harmful. This article will focus on common vulnerabilities and response measures for OpenSSL in Debian systems. DebianOpenSSL known vulnerabilities: OpenSSL has experienced several serious vulnerabilities, such as: Heart Bleeding Vulnerability (CVE-2014-0160): This vulnerability affects OpenSSL 1.0.1 to 1.0.1f and 1.0.2 to 1.0.2 beta versions. An attacker can use this vulnerability to unauthorized read sensitive information on the server, including encryption keys, etc.

The article explains how to use the pprof tool for analyzing Go performance, including enabling profiling, collecting data, and identifying common bottlenecks like CPU and memory issues.Character count: 159

The article discusses writing unit tests in Go, covering best practices, mocking techniques, and tools for efficient test management.

Queue threading problem in Go crawler Colly explores the problem of using the Colly crawler library in Go language, developers often encounter problems with threads and request queues. �...

The library used for floating-point number operation in Go language introduces how to ensure the accuracy is...

The article discusses the go fmt command in Go programming, which formats code to adhere to official style guidelines. It highlights the importance of go fmt for maintaining code consistency, readability, and reducing style debates. Best practices fo

This article introduces a variety of methods and tools to monitor PostgreSQL databases under the Debian system, helping you to fully grasp database performance monitoring. 1. Use PostgreSQL to build-in monitoring view PostgreSQL itself provides multiple views for monitoring database activities: pg_stat_activity: displays database activities in real time, including connections, queries, transactions and other information. pg_stat_replication: Monitors replication status, especially suitable for stream replication clusters. pg_stat_database: Provides database statistics, such as database size, transaction commit/rollback times and other key indicators. 2. Use log analysis tool pgBadg

Backend learning path: The exploration journey from front-end to back-end As a back-end beginner who transforms from front-end development, you already have the foundation of nodejs,...
