- vừa được xem lúc

[Series] Learn Go Day 1

0 0 21

Người đăng: Trung Phạm

Theo Viblo Asia

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 dụng

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 hiểu nôn na là trì hoãn việc thực thi một hàm cho đến khi hàm còn lại được trả về.

import "fmt" func main() { defer fmt.Println("world") fmt.Println("hello")
}

Stacking defers: là các hàm được gọi nhưng bị trì hoãn được đẩy lên một ngăn xếp. Khi một hàm trả về, các hàm bị trì hoãn của nó được thực hiện 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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Embedded Template in Go

Getting Start. Part of developing a web application usually revolves around working with HTML as user interface.

0 0 56

- vừa được xem lúc

Tại sao bạn nên học Go ?

. Trong những năm gần đây, có một sự trỗi dậy của một ngôn ngữ lập trình mới Go hay Golang. Không có gì làm cho các developer chúng ta phát cuồng hơn một ngôn ngữ mới, phải không ?.

0 0 34

- vừa được xem lúc

Implement Multi-Connections Download in Go - Part II

Getting Start. In Part I we've looked at how to implement core download functionality as well as define a public API for client to use our package.

0 0 25

- vừa được xem lúc

Sự khó chịu khi mới học Golang và cách giải quyết siêu đơn giản

Gần đây mình đang tìm một giải pháp backend thay thế cho Java Spring (do nó nặng vãi chưởng), sẵn tiện học luôn ngôn ngữ mới. Bỏ ra một ngày để tìm hiểu, khảo sát vài ngôn ngữ backend, cuối cùng mình

0 0 58

- vừa được xem lúc

Serverless Series (Golang) - Bài 9 - Codepipeline Notification with AWS Chatbot and AWS SNS

Giới thiệu. Chào các bạn tới với series về Serverless, ở bài trước chúng ta đã tìm hiểu về cách dựng CI/CD với Codepipeline.

0 0 24

- vừa được xem lúc

Golang và Goroutines

Giới thiệu. Dạo gần đây mình có tìm hiểu về Go hay còn được gọi là Golang thì mình thấy Go có đặc điểm nổi bật là có tốc độ xử lý nhanh và hỗ trợ xử lý đa luồng (concurrency) rất tốt với Goroutines.

0 0 48