+10

[Series] Learn Go Day 1

Giới thiệu

Trong bài viết này, mình sẽ viết lại tất cả các kiến thức trong quá trình mình học. Get's go!!!

Nội dung

Khai báo biến

Ta có 3 cách khai báo biến:

1. var <name> <type>
   => var one int; one = 1
        
2. var <name> = <value>
   => var one = 1
        
3. <name> := <value>
   => one := 1

Lưu ý: Cách khai báo 2 và 3 nên dùng ở trong một function, còn cách khai báo 1 ta thường dùng để khai báo biến global cho toàn bộ code.

Các biến được khai báo nhưng không có giá trị thì:

0 for numeric types,
false for the boolean type, and
"" (the empty string) for strings.

Sử dụng điều kiện if/else

if <condition expression> {
    // implement code
} else if <condition expression> {
    // implement code
} else {
    // implement code
}

If rút gọn:

func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n); v < lim {
		return v
	}
	return lim
}

Các loại dữ liệu

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // alias for uint8

rune // alias for int32
     // represents a Unicode code point

float32 float64

complex64 complex128

Chuyển đổi loại dữ liệu

Biểu thức T(v) chuyển đổi giá trị v thành kiểu T.

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

hoặc

i := 42
f := float64(i)
u := uint(f)

Nếu như chúng ta khai báo := như thế này thì kiểu dữ liệu sẽ dựa vào value của biến đó:

i := 42           // int
f := 3.142        // float64
g := 0.867 + 0.5i // complex128

Khai báo hàm

Một hàm có thể nhận 0 hoặc nhiều đối số.

Hàm Trả về 1 giá trị:

func add(x int, y int) int {
	return x + y
}

Hàm trả về nhiều giá trị:

func add(x , y int) (int, int) {
	return x, y
}

Vòng lặp For

For:

sum := 0
for i := 0; i < 10; i++ {
	sum += i
}

Continue:

sum := 1
for ; sum < 1000; {
	sum += sum
}

While:

sum := 1
for sum < 1000 {
	sum += sum
}

Nếu bạn bỏ qua điều kiện vòng lặp, nó sẽ lặp mãi mãi.

for {
}

Switch

Có điều kiện:

import (
	"fmt"
	"runtime"
)

switch os := runtime.GOOS; os {
	case "darwin":
		fmt.Println("OS X.")
	case "linux":
		fmt.Println("Linux.")
	default:
		// freebsd, openbsd,
		// plan9, windows...
		fmt.Printf("%s.\n", os)
}

Không có điều kiện:

import (
	"fmt"
	"time"
)


t := time.Now()
switch {
case t.Hour() < 12:
	fmt.Println("Good morning!")
case t.Hour() < 17:
	fmt.Println("Good afternoon.")
default:
	fmt.Println("Good evening.")
}

Defer

Defer là 1 tính năng của Go, cho phép gắn 1 hàm để thực hiện sau khi hàm chính hoàn thành.

import "fmt"

func main() {
	defer fmt.Println("world")

	fmt.Println("hello")
}

Stacking defers: là các hàm được gọi nhưng chưa được thực hiện và bị đẩy lên stack. Khi hàm chính hoàn thành, các hàm chưa thực hiện nó sẽ được chạy theo thứ tự LIFO ( Last-in-First-out ).

import "fmt"

func main() {
	fmt.Println("counting")

	for i := 0; i < 10; i++ {
		defer fmt.Println(i)
	}

	fmt.Println("done")
}

Tổng kết

Vậy là sau 1 ngày mình đã học được:

  • cách khai báo biến
  • câu lệnh if/else
  • các kiểu dữ liệu
  • khai báo hàm.
  • Vòng lặp For
  • Switch
  • Defer, Stacking Defer

Cám ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn 1 ngày vui vẻ. Tks


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí