Golang : Dealing with struct's private part
One of the most common things in Golang that easily confuse a newbie is how to declare variable/constant/identifier name properly. Many programmers are able to compile their code successfully, but left puzzled by missing/empty data after being processed. The reason is because the variable/identifier name starts with small cap and in essence turning the variable/identifier into a private type. (see https://golang.org/ref/spec#Exported_identifiers )
IF for some reason that you need to use a private variable inside a struct, the way to manipulate the private variable is to associate methods to it.
For the code example below, the email
variable is private type inside the Person struct and the SetEmail() and Email() methods are created specifically to deal with the email
variable.
Here you go :
package main
import "fmt"
import "encoding/json"
type Person struct {
Name string // 1st letter cap is public, while small cap is private
email string
Gender string
Age int
}
func (p *Person) SetEmail(email string) {
p.email = email
}
func (p Person) Email() string {
return p.email
}
var v = []byte(`[
{
"name": "Denis Silva Costa",
"email": "d*@gmail.com",
"gender": "Male",
"age": 27
},
{
"name": "Ariana Cursino",
"email": "a@a.com",
"gender": "Female",
"age": 31
}
]`)
func main() {
var people []Person
err := json.Unmarshal(v, &people)
if err != nil {
}
// email WILL NOT be displayed because it is private
fmt.Println(people)
// set data to private variable via SetEmail method
people[0].SetEmail("d@gmail.com")
people[1].SetEmail("a@a.com")
// Retrieve data from private variables via Email method
fmt.Println(people[0].Email())
fmt.Println(people[1].Email())
}
Output :
[{Denis Silva Costa Male 27} {Ariana Cursino Female 31}]
d@gmail.com
a@a.com
Hope this short tutorial can be useful to new comers to Golang. Happy coding!
Oh, by the way, the original title for this article is "Golang : Dealing with private variable in struct". ;-)
Reference :
See also : Golang : fmt.Println prints out empty data from struct
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+9k Golang : How to get ECDSA curve and parameters data?
+11k Golang : Delay or limit HTTP requests example
+10.1k Golang : Meaning of omitempty in struct's field tag
+22.4k Golang : simulate tail -f or read last line from log file example
+9.5k Golang : Resumable upload to Google Drive(RESTful) example
+5.5k Unix/Linux : How to test user agents blocked successfully ?
+21.4k Golang : Setting up/configure AWS credentials with official aws-sdk-go
+7.9k Golang : Find relative luminance or color brightness
+21.4k Golang : Upload big file (larger than 100MB) to AWS S3 with multipart upload
+8.3k Golang : Another camera capture GUI application with GTK and OpenCV
+10.3k Golang : How to delete element(data) from map ?
+7.2k Golang : Handling Yes No Quit query input