Chuyển đến nội dung chính
Mô-đun 3 · Bài học 1 trong tổng số 511/50 trong khóa học~10 min
Bài học theo mô-đun (1/5)

Chữ ký và thông số

Trong Go, các hàm được khai báo bằng func. Cú pháp chữ ký khác nhau từ C/Java: loại đi sau tên tham số, được phân tách bằng dấu không gian. Đó là một lựa chọn giúp đọc to tốt hơn — thay vào đó là "n kiểu int" của "int n".

Cú pháp cơ bản

Go
func sum(a int, b int) int {
    return a + b
}

func greet(name string) {
    fmt.Println("ciao", name)
}

Một hàm không có giá trị trả về sẽ bỏ qua kiểu trả về.

Các tham số liên tiếp cùng loại

Nếu nhiều tham số liên tiếp có cùng loại, bạn có thể khai báo nó chỉ một lần ở cái cuối cùng. Đó là thành ngữ và bạn sẽ thấy nó ở khắp mọi nơi:

Go
func sum(a, b int) int { return a + b }
func max3(a, b, c float64) float64 { /* ... */ }
func parse(s, sep string, limit int) []string { /* ... */ }

Các hàm đã xuất và chưa xuất

Trong Go, khả năng hiển thị được xác định theo tên: số nhận dạng bắt đầu có chữ in hoa được xuất (hiển thị từ các gói khác), những cái khác là riêng tư đối với gói.

Go
func Sum(a, b int) int { ... }    // esportata
func helper() { ... }              // privata al package

Chức năng như giá trị

Các hàm là giá trị hạng nhất: bạn có thể gán chúng, chuyển chúng và trả lại chúng. Chúng ta sẽ tìm hiểu sâu hơn trong bài học về việc đóng cửa.

Go
op := sum            // op ha tipo func(int, int) int
fmt.Println(op(2, 3)) // 5

main và init: hai cái tên đặc biệt

  • func main() là điểm vào của gói main. Không có lý lẽ, không có giá trị trả về.
  • func init() được gọi tự động khi khởi động gói (thậm chí nhiều gói lần nếu nhiều tệp xác định một). Hữu ích cho việc thiết lập; sử dụng nó một cách tiết kiệm.

Hãy thử nó

tập thể dục#go.m3.l1.e1
Nỗ lực: 0Đang tải…

Xác định hàm sum(a, b int) int trả về a+b, sau đó gọi nó trong hàm main bằng (3, 4).

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Kiểu chia sẻ: `(a, b int)`. Kiểu trả về SAU dấu ngoặc đơn.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#go.m3.l1.e2
Nỗ lực: 0Đang tải…

Xác định lời chào (chuỗi tên) (không có giá trị trả về) in 'ciao <name>'.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Không có kiểu trả về nếu hàm không trả về gì.

Giải pháp khả dụng sau 3 lần thử

Quiz#go.m3.l1.e3
Sẵn sàng

Loại tham số đi đâu trong Go?

Go
func f(? ?) {}
Tùy chọn trả lời

Tóm tắt lại

  • func name(param type, ...) returnType { ... }.
  • Gõ sau tên; các tham số liên tiếp cùng loại → khai báo nó chỉ một lần.
  • Chữ hoa đầu tiên = đã xuất; chữ thường = riêng tư cho gói.
  • Chức năng thuộc hạng nhất (có thể gán, có thể vượt qua).
  • main và init là những tên dành riêng có ngữ nghĩa đặc biệt.