Golang : Dealing with struct's private part

Tags : golang public private type struct methods

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

  // set data to private variable via SetEmail method


  // Retrieve data from private variables via Email method


Output :

[{Denis Silva Costa Male 27} {Ariana Cursino Female 31}]



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

Tags : golang public private type struct methods

By Adam Ng
