Skip to main content

Posts

Showing posts from May, 2023

Crypto RSA Signing and Verification in Golang

  RSA [Rivest-shamir-Adleman] encryption is one of the most widely used algorithms for secure data encryption. Signing and Verification:   RSA works by generating form of key pair of private and public keys. For Signing:  we need to provide some inputs,  A random reader used for generating random bits because if we provide the same input, it doesn't give the same output as last time. Before signing, we need to hash our message. we also need to provide which hash function is used for message hashing. Finally, private key.  For Verifying: we need to provide some inputs,  hash of our message. which hash function is used for message hashing while signing. Finally, public key and signature what we obtained while signing.  Example: package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "encoding/hex" "fmt" "log" ) func main() { privatekey, publickey := GenerateRsaKeys() message := "

What is Cryptocurrency and Blockchain Technology?

Cryptocurrency: A digital currency in which transactions are verified and records maintained by a decentralized system using cryptography, rather than by a centralized authorities like banks. It’s peer-to-peer network that enables anyone can send or receive payments from anywhere. Crypto works like Distributed public ledger (blockchain plays the vital role here) which stores all transaction details held by the currency holders. Cryptocurrencies are created through a process called mining, which involves using computer power to solve complicated mathematical problems that generate coins. Blockchain Technology: Blockchain technology is a structure that stores transactional records, also known as the block, of the public in several databases, known as the “chain,” in a network connected through peer-to-peer nodes. It uses Hash function to generate a non-readable and non-understandable value. Hash function: We can send data of any size but the output is fixed. Hash(data) -- > fi

Comparing Structs in Go

We can compare two structs in two ways:     1. Equal to (==) Operator     2. DeepEqual() Method in reflect package Example using (==) Operator : package main import "fmt" type User struct { name string age int } func main() { u1 := User{"tejas", 23} u2 := User{"tejas", 23} u3 := User{"vicky", 22} fmt.Println("Comparing u1 and u2 struct :", u1 == u2) fmt.Println("Comparing u1 and u3 struct :", u1 == u3) } Output: Comparing u1 and u2 struct : true Comparing u1 and u3 struct : false Example using DeepEqual() Method : package main import ( "fmt" "reflect" ) type User struct { name string age int } func main() { u1 := User{"tejas", 23} u2 := User{"tejas", 23} u3 := User{"vicky", 22} fmt.Println("Comparing u1 and u2 struct :", reflect.DeepEqual(u1, u2)) fmt.Println("Comparing u1 and u3 struct :", reflect.DeepEqual(u1, u3)) } Outpu

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

Structs in Golang

A struct in Golang is a user-defined type that allows to combine different types of variables into single type. In Golang, Structures does not support inheritance but supports composition. We can define a struct using a keyword struct. Syntax: type struct_name struct{} Example : package main import "fmt" type User struct { name string age int } func main() { // declare a struct variable var user1 User user1.name = "vicky" user1.age = 22 // declaration and initialization of struct at a same to a struct variable user2 := User{"tejas", 23} // you can define a struct address to a varibale while initializing user3 := &User{"vinu", 23} fmt.Println("user 1 : "user1) fmt.Println("user 2 : "user2) fmt.Println("user 3 : "*user3) } Output: user 1 : {vicky 22} user 2 : {tejas 23} user 3 : {vinu 23} Anonymous Struct in Golang: A anonymous struct is a struct with no name. It's useful when

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

Different methods of copying an array using Golang

Example for copying an Array by value:   package main import "fmt" func main() { // declare an array arr1 := [2]int{1, 2} // copying the array by value arr2 := arr1 // change the 1st index value of the original declared array, it won't reflect on copyed array arr1[0] = 10 fmt.Println("Array 1 values :", arr1) fmt.Println("Array 2 values :", arr2) } Output:   Array 1 values : [10 2] Array 2 values : [1 2] Copying an array by reference: package main import "fmt" func main() { // declare an array arr1 := [2]int{1, 2} // copying the array value by references arr2 := &arr1 // change the 1st index value of the original declared array, it will reflect on copyed array // because the arr2 holds value of arr1 address arr1[0] = 10 fmt.Println("Array 1 values :", arr1) fmt.Println("Array 2 values :", *arr2) } Output:   Array 1 values : [10 2] Array 2 values : [10 2] Using Copy function: package main import &qu

Go Arrays with Examples

Arrays: Arrays is used to store multiple values of same types in a single variable. We can create an array with two different ways. Using var keyword      var arr [3] int Using Shortcut variable declaration     arr := [3] int {"a","b","c"} Example: package main import "fmt" func main() { var arr1 = [3]string{"a", "b", "c"} // shothand declaration arr2 := [3]string{"1", "2", "3"} // if we use ellipsis, length of the array is determined by the initialized elements like arr := []string{"1","2"} var arr3 = [...]string{"hello"} fmt.Println("Array 1 length:", len(arr1)) fmt.Println("Array 2 length:", len(arr2)) fmt.Println("Array 3 length:", len(arr3)) } Output: Array 1 length: 3 Array 2 length: 3 Array 3 length: 1 Comparing Two Arrays Example: We are able to compare two arrays using (==) operator. package

Go Constants

The keyword for Golang Constant is const  , Once the Constant variable declared it cannot be modified. Same as Var keyword, we can declare constant as two types.     1. Typed      --  const  a string = "abc"       2. Untyped --  const  a ="abc"  Example for using Golang Constants: package main import "fmt" // declaring Multiple variables const ( a = 1 b = "hi" c = 1.1 ) func main() { fmt.Println(a) fmt.Println(b) fmt.Println(c) } Output: 1 hi 1.1 Another Example: package main import "fmt" func main() { const a = "Hello" a = "Hi" fmt.Println(a) } Output: ./prog.go:7:2: cannot assign to a (untyped string constant "Hello") Go build failed. Another Example: package main import "fmt" func main() { // declare and initialize a constant string const s string = "MY_CONST" // define a custom string type - str type str string // storing the const variable in a new variable is all

Go Variables

The most general form to declare a variable in Golang uses the  var  keyword, an explicit type. Examples for Variable declaration and initialization using Golang: package main import "fmt" func main() { // 1. Declare a variable and initialize it [Typed Variable] var a string a = "vignesh" fmt.Println(a) // declaration and initialization at a same time // var a string = "vignesh" //default values for types: // int -> 0, string -> "", // float -> 0, byte -> 0 // bool -> false // 2. Shortcut variable declaration (dynamic) b := "vicky" fmt.Println(b) // 3. Go can initialize the type of the variable [UnTyped Variable] var c = false fmt.Println(c) // 4.We can declare and initialize multiple variables with multiple types at a time var x, y, z = 1, "abc", 12.0 fmt.Println(x) fmt.Println(y) fmt.Println(z) m, n := 1, 1

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