68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: If in Go | ||
|  | --- | ||
|  | 
 | ||
|  | # If in Go
 | ||
|  | 
 | ||
|  | Go's `if` statements are like its `for` loops; the expression need not be surrounded by parentheses | ||
|  | `(` `)` but the braces `{` `}` are required. | ||
|  | 
 | ||
|  | ```go | ||
|  | func sqrt(x float64) string { | ||
|  | 	if x < 0 { | ||
|  | 		return sqrt(-x) + "i" | ||
|  | 	} | ||
|  | 	return fmt.Sprint(math.Sqrt(x)) | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | Like `for`, the `if` statement can start with a short statement to execute before the condition. | ||
|  | 
 | ||
|  | Variables declared by the statement are only in scope until the end of the `if`. | ||
|  | 
 | ||
|  | ```go | ||
|  | func pow(x, n, lim float64) float64 { | ||
|  | 	if v := math.Pow(x, n); v < lim { | ||
|  | 		return v | ||
|  | 	} | ||
|  | 	return lim | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ## If and else
 | ||
|  | 
 | ||
|  | Variables declared inside an `if` short statement are also available inside any of the `else` blocks. | ||
|  | 
 | ||
|  | ```go | ||
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 	"math" | ||
|  | ) | ||
|  | 
 | ||
|  | func pow(x, n, lim float64) float64 { | ||
|  | 	if v := math.Pow(x, n); v < lim { | ||
|  | 		return v | ||
|  | 	} else { | ||
|  | 		fmt.Printf("%g >= %g\n", v, lim) | ||
|  | 	} | ||
|  | 	// can't use v here, though | ||
|  | 	return lim | ||
|  | } | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	fmt.Println( | ||
|  | 		pow(3, 2, 10), | ||
|  | 		pow(3, 3, 20), | ||
|  | 	) | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | Running the above program produces an output similar to the following output - | ||
|  | ```     | ||
|  | $ go run if.go | ||
|  | 27 >= 20 | ||
|  | 9 20 | ||
|  | ``` |