Tự học Go trong... vài ngày - Tập 2
Go
41
White

Huy Trần viết ngày 12/07/2015

Ở bài trước, chúng ta đã cài đặt thành công môi trường dev cho Golang. Và đã chạy được chương trình Hello World nhàm chán.

Hôm nay, chúng ta sẽ bắt đầu với những kiến thức cơ bản về Go.

Các kiểu dữ liệu có trong Go

Cũng giống như các ngôn ngữ lập trình khác, việc đầu tiên cần quan tâm là Go hỗ trợ những kiểu dữ liệu nào?

Go cung cấp cho chúng ta rất nhiều kiểu dữ liệu để sử dụng như:

  • Các kiểu cơ bản: int, uint, int8, uint8, bool, string, float32, float64, complex64, complex128,...
  • Kiểu struct
  • Mảng ([]int, [3]string, []struct{ Name string},...)
  • Maps (map[string]int)

Ngoài ra, Go còn hỗ trợ:

  • Con trỏ (*int, *Car,...)
  • Hàm (func (int, int) int)
  • Channel (chan bool)
  • Interface

Vài đường cơ bản với Go

Khai báo biến

Để khai báo một biến trong Go, chúng ta có 2 cách:

Khai báo biến dùng từ khoá var

Chúng ta có thể khai báo biến theo cú pháp sau:

var [tên-biến] [kiểu-dữ-liệu] = [giá-trị]

Ví dụ:

var kipalog string = "Kipalog"
var members int = 5000

Hoặc có thể bỏ luôn kiểu dữ liệu, Go sẽ nhận diện kiểu dữ liệu dựa trên giá trị khởi tạo:

var birthday = 18
var name = "Huy"

Khai báo biến không dùng từ khoá var

Với kiểu khai báo này, chúng ta luôn luôn phải chỉ định giá trị khởi tạo cho biến, và khai báo bằng kí tự :=

Kiểu dữ liệu sẽ được gán tự động dựa trên giá trị khởi tạo.

a := 0                  // kiểu int
b := true               // kiểu bool
f := 6.4                // kiểu float

Mặc dù có thể khai báo biến một cách tự do giống như Javascript hay PHP, nhưng Go là một ngôn ngữ định kiểu, nên bạn sẽ không thể nào tương tác các biến không cùng kiểu dữ liệu, ví dụ:

a := 5
b := "hello"
C := a + b

Khai báo hằng (const)

Để khai báo hằng, ta dùng từ khoá const, ví dụ:

const API_SERVER string = "http://google.com/api/"

Khai báo hàm

Để khởi tạo một hàm trong Go, chúng ta sử dụng cú pháp sau:

func [tên-hàm] ([tham-số]) [kiểu-dữ-liệu-trả-về] { }

Ví dụ, chúng ta khai báo một hàm fun nhận vào 2 tham số kiểu int và trả về dữ liệu kiểu string :

func fun(a int, b int) string {
    ...
}

Một hàm có thể return về nhiều giá trị cùng lúc, khi đó chúng ta có thể khai báo như sau:

func DivAndMod(a int, b int) (int, int) {
    return (a / b), (a % b)
}

Định nghĩa một kiểu dữ liệu mới

Để làm cho code rõ ràng hơn, chúng ta có thể định nghĩa ra các kiểu dữ liệu tuỳ chọn bằng cú pháp sau:

type [tên-kiểu] [chi-tiết]

Ví dụ:

type Age int

Khai báo struct

Để định nghĩa một kiểu dữ liệu dưới dạng có cấu trúc, chúng ta tạo các struct, với cú pháp như sau:

type [tên-kiểu] struct { [chi-tiết] }

Ví dụ chúng ta tạo một cấu trúc kiểu Car:

type Car struct {
    name    string
    model   int
}

Class và Method

Go không hỗ trợ class, vì thế, nếu muốn thiết kế class, chúng ta có thể tạo ra các struct, rồi dùng cú pháp sau để khai báo các function dưới dạng method của struct đó:

func [đối-tương-cần-method] [tên-method] ([tham-số]) [kiểu dữ liệu trả về] { }  

Nói nghe có vẻ khó hiểu quá, thôi làm thử một ví dụ cho dễ hiểu.

Ví dụ: Thiết kế class Terminator có các thuộc tính: Name, Model, và các method: Hello, Fire:

type Terminator struc {
    name string
    modmel string
}

func (t Terminator) Hello() {
    ...
}

func (t Terminator) Fire(power int) bool {
    ...
}

Và sau này khi cần khởi tạo đối tượng mới từ class Terminator, chúng ta làm như sau:

var T800 = Terminator{ "Arnold", "T800" }
T800.Hello()
var result = T800.Fire(100)

Bài tập

Bài học hôm nay đến đây là hết. Ở bài sau, chúng ta sẽ cùng tìm hiểu về Con trỏ và cách cấp phát bộ nhớ, các lệnh điều khiển cơ bản

Để tổng kết bài học hôm nay, chúng ta hãy cùng làm một bài tập nhỏ:

Thiết kế một class Account, mô phỏng hoạt động của một tài khoản ngân hàng, có các thuộc tính sau:

  • name: string
  • amount: float32

Và các method:

  • setName(name): Thiết lập tên cho account, thông qua biến name
  • getAmount(): Lấy thông tin số dư tài khoản (qua biến amount)
  • addFund(number): Thêm tiền vào tài khoản
  • withdrawMoney(number): Rút tiền ra khỏi tài khoản

Yêu cầu:

  • Hàm withdrawMoney sẽ trả về true/false tuỳ theo giao dịch rút tiền có thực hiện được không, đồng thời trả về số dư còn lại sau khi rút tiền
  • Chỉ có thể rút được tiền khi số dư tài khoản lớn hơn 50.0
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Huy Trần

98 bài viết.
1438 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
144 43
Tại sao phải viết blog kĩ thuật? Có rất nhiều bài viết trên mạng nói về vấn đề tại sao một lập trình viên nên thường xuyên viết các bài blog kĩ thu...
Huy Trần viết hơn 2 năm trước
144 43
White
143 37
(Ảnh) Tiếp tục sêri (Link) lần này, chúng ta sẽ cùng tìm hiểu và mô phỏng lại một chức năng mà mọi người đang bắt đầu sử dụng hằng ngày, đó là chứ...
Huy Trần viết hơn 1 năm trước
143 37
White
96 16
Phần 1: Tự truyện Tui và Toán đã từng là hai kẻ thù không đội trời chung trong suốt hơn mười lăm năm ròng rã. Ngay từ ánh nhìn đầu tiên đã ghét nh...
Huy Trần viết gần 2 năm trước
96 16
Bài viết liên quan
White
7 2
Makefile thực hiện một số thao tác thường dùng trong Go Khi làm project Go mình thường tạo một file Makefile dạng này: Lưu ý nhớ thay thành tên m...
Huy Trần viết hơn 1 năm trước
7 2
White
39 15
Go là gì? Dùng nó cho việc gì? Chắc hẳn đến thời điểm hiện tại, không ai là chưa nghe đến Go (hay còn gọi là Golang), một ngôn ngữ lập trình được ...
Huy Trần viết hơn 2 năm trước
39 15
White
22 3
Introduction Buffering (buffered IO) là một trong những kỹ thuật kinh điển khi chúng ta cần đọc/ghi dữ liệu. Trong bài viết này mình sẽ đi sâu hơn...
Linh Tran Tuan viết 4 tháng trước
22 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
98 bài viết.
1438 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!