Skip to main content

Do you support us?

Business address
0x1D24D8f27ea73ff604C7685246bdC6ae55bddaEF

Who's am I?

When we are writing problem or build a project, most of time we need to free our resources. When the program release resources ;
1. Program run so fast
2.  Resources allocate to others user too.
3. Handle multitasking.

Today I'm writing on Defer function call. Defer function call execute when you free your resources such as closing file, resources lock and unlock, network connection close etc.
Defer also use for debugging purpose too. Defer keyword is used.

func title(url string) error { 
resp, err := http.Get(url) 
if err != nil { 
    return err 
} 
defer resp.Body.Close() 
ct := resp.Header.Get("Content-Type") 
if ct != "text/html" && !strings.HasPrefix(ct, "text/html;") { 
   return fmt.Errorf("%s has type %s, not text/html", url, ct) 
} 
doc, err := html.Parse(resp.Body) 
if err != nil { 
   return fmt.Errorf("parsing %s as HTML: %v", url, err) } // ...print doc's title element... return nil 
}
  How Program Work?
      resp, err := http.Get(url) 
              Http.get take url and return error if there is. 
      defer resp.Body.Close()  here html resources release
      ct := resp.Header.Get("Content-Type")    get header of website
      if ct != "text/html" && !strings.HasPrefix(ct, "text/html;")  check either this html text.

Debugging using defer 
func bigSlowOperation() { defer trace("bigSlowOperation")() // don't forget the extra parentheses // ...lots of work... time.Sleep(10 * time.Second) // simulate slow operation by sleeping 
}func trace(msg string) func() { start := time.Now() log.Printf("enter %s", msg) return func() { log.Printf("exit %s (%s)", msg, time.Since(start)) } }
Output: 
           2015/11/18 09:53:26 enter bigSlowOperation 
           2015/11/18 09:53:36 exit bigSlowOperation (10.000589217s) 

Defer function call is very useful. 
Every time you don't reinitialize your resources before it use.
Once you initialize your resources, after job done you can defer your resources.
Defer execution just like stack up to bottom. 
package main

import (
"fmt"
)
func main() {
fmt.Print("Execution start\n")
Print()
f()
}
func Print(){
for i := 0; i < 5; i++{
fmt.Println("i:", i)
}
}
func f(){
for i := 0; i < 5; i++{
defer fmt.Println("i:", i)
}
}
                                                PlayTime
  

Comments

Popular posts from this blog

Rosicrucian cipher

In 1513 Cornelius Agrippa introduce early form Rosicrucian Cipher in his books Occult of Philosophy. Geometric and simple substitution cipher are well known ciphers      Pigpen , Freemason, Napoleon and tic tac toe ciphers in which alphabets or symbols arrange in grids.  This is an anagram, "How to reconstruct a data " lets encode the message.       Pigpen cipher , Rosicrucian and Tic tac toe Cipher                      Thank you have a good day.    

Enumerate

Golang provide  own enumerate method which is easy and very powerful. I will show you enumerate with in a sec. When i code enumerate in java, believe me i don't understand why it's used? So i never play from this card at that time, but recently when i start learning go. Now i used where it's used and why? Enumerate basically a counting method. Code   package main import ( " fmt " ) type Weekend int const ( Sunday Weekend = iota Monday Tuesday Wednesday Thursday Friday Saturday ) func main () { fmt. Printf ( " %d " ,Saturday) } If you remember adding color layer then you familiar from this code.  First i create my own type called weekend then used this type.  Iota-generator:   Things that confuse you Sunday Weekend = iota & Monday without value. Before we start Iota-generator first we understand monday without type or value         const ( c = 1 // c : 1 d      // d : 1 ) fmt.Pr

Every Object have a structure

If you start your programming career from c , then you know little about structs. Later Struct replace by classes in object oriented programming. However Go inherit from C. Structs :     With the help of structs, programmer can develop any type of structure         List        Stack        Queue        Trees        Graphs package main import ( " fmt " ) type Students struct { ID int Name string } var record Students func Id ( i int ) int { record. ID = i return record. ID } func Name ( name string ) string { record. Name = name return record. Name } func main () { var id int = 0 var name string = " ali " fmt. Println ( " id: " , Id (id), " name: " , Name (name)) } When we want to create custom type such as Celsius type Celsius float64, same with structs type Students structs except type need data type and in structs. You tells that's struct. Inside Structs