Skip to main content

Nested Struct in Go

A Struct which has a field of another struct is called Nested struct

Example :

 package main
 import "fmt"
 type User struct {
	name    string
	age     int
	address Address
 }
 type Address struct {
	city    string
	state   string
	pincode int
 }
 func main() {
 	// declare a struct variable & initialize it after
	var user1 User
	user1.name = "vicky"
	user1.age = 22
	user1.address.city = "chennai"
	user1.address.state = "tamilnadu"
	user1.address.pincode = 600001

	// declaration and initialization of nested struct 
	user2 := User{"tejas", 23, Address{"madurai", "tamilnadu", 600001}}

	fmt.Println(user1)
	fmt.Println(user2)
 }

Output:

user 1 :  {vicky 22 {chennai tamilnadu 600001}}
user 2 :  {tejas 23 {madurai tamilnadu 600001}}

Important Note: we can embed an another struct into a struct by anonymously providing no name to the struct field

 package main
 import "fmt"
 type User struct {
	name string
	age  int
	// here we are providing a name to nested struct field [anonymous filed]
	// basically we are embedding the another struct[Address] fields to this struct[User] 
	Address
 }
 type Address struct {
	city    string
	state   string
	pincode int
 }
 func main() {

	user := User{"tejas", 23, Address{"madurai", "tamilnadu", 600001}}

	fmt.Println("Name :", user.name)
	fmt.Println("Age :", user.age)
	
	// user variable can directly access the address struct fields
	fmt.Println("City :", user.city)
	fmt.Println("State :", user.state)
	fmt.Println("Pincode :", user.pincode)
 }

Output:

Name : tejas
Age : 23
City : madurai
State : tamilnadu
Pincode : 600001

Comments

Popular posts from this blog

Why Go Language?

Go Language: Open Source Programming language Statically Typed language Makes sharing code easy Similar to C programming language Organization that use Go includes Google, Docker, Kubernetes, Cloudflare, Dropbox, Netflix & Uber. Why Go language? C like Syntax Compiles to native code i.e. one executable file is need to run the whole program. Garbage collection Concurrency built-in language Compatibility promise → Once a program written to the go one specification will continue to compile and run correctly, over the lifetime of that specification. Why Go Compiler is fast? Simple and Minimalistic (20 keywords only) Does not allows unused dependencies No circular dependencies Does not use header files Solving Modern problems with Go: Go has concise syntax with few keywords to remember. Languages like C or C++ offers fast execution, whereas languages like Ruby or Python offers rapid application development, Go bridges these computing worlds and offers development fast. Modern Computers ...

Crypto ED25519 Signing and Verifying using Golang

The Edwards-curve Digital Signature Algorithm (ECDSA) is used to create a digital signature using an enhancement of the Schnorr signature with Twisted Edwards curves. Overall it is faster that many other digital signature methods, and is strong for security. One example of ECDSA is Ed25519, and which is based on Curve 25519. It generates a 64-byte signature value of (R,s), and has 32-byte values for the public and the private keys. Example : package main import ( "crypto/ed25519" "crypto/rand" "encoding/hex" "fmt" "log" ) func main() { publickey, privatekey, err := ed25519.GenerateKey(rand.Reader) if err != nil { fmt.Println("cannot generate ecdsa keys") log.Fatal(err) } msg := "hello" signedBytes := ed25519.Sign(privatekey, []byte(msg)) fmt.Println("Signed Message :", hex.EncodeToString(signedBytes)) if !ed25519.Verify(publickey, []byte(msg), signedBytes) { fmt.Println("ver...

Copy function in Golang

How Copy function works ? The built-in copy function copies the source element into the destination element and returns the destination element length.   func Copy( dst , src [] Type) int There are some special case using this function which is we can copy a string into an byte slice variable   func Copy( dst []byte, src string) int Examples: package main import "fmt" func main() { var arr = make([]string, 2) n := copy(arr, []string{"hi", "hello", "welcome", "ll"}) fmt.Println("element length :", n) fmt.Println("values :", arr) } Output: element length : 2 values : [hi hello] Special Case example: package main import "fmt" func main() { var b = make([]byte, 5) // copy from a string to byte slice n := copy(b, "vicky") fmt.Println("element length :", n) fmt.Println("values :", string(b)) } Output: element length : 5 values : vicky