Rate this post

Các bài viết liên quan:

Giới thiệu về Packages trong Golang

Packages trong Golang là một cách để tổ chức và phân chia mã nguồn vào các đơn vị độc lập, giúp quản lý dự án và tái sử dụng mã dễ dàng hơn. Mỗi package chứa một nhóm các file mã nguồn liên quan đến nhau và cung cấp các hàm, cấu trúc và biến có liên quan.

Một package có thể bao gồm nhiều file mã nguồn, và các package khác nhau có thể được sử dụng bởi nhau bằng cách sử dụng cú pháp import. Packages trong Golang giúp tạo ra sự cô đọng và sắp xếp logic của mã nguồn, tăng tính tổ chức và quản lý của dự án.

Packages trong Golang có một số đặc điểm quan trọng:

  • Packages có thể được sử dụng lại trong các dự án khác nhau, giúp tiết kiệm thời gian và công sức phát triển.
  • Các package trong Golang được tổ chức theo cấu trúc thư mục, trong đó tên package phản ánh tên thư mục chứa nó.
  • Golang cung cấp các package chuẩn được cài đặt sẵn, giúp xây dựng ứng dụng dễ dàng hơn.
  • Các package có thể được xuất (exported) hoặc không được xuất (unexported), điều này quy định quyền truy cập của các thành phần bên trong package từ bên ngoài.

Sử dụng packages trong Golang giúp tạo ra mã nguồn có cấu trúc rõ ràng, dễ đọc và dễ bảo trì. Đồng thời, việc sử dụng các package chuẩn giúp mở rộng khả năng phát triển ứng dụng một cách nhanh chóng và hiệu quả.

Trong bài viết “Packages, import và visibility trong Golang”, sẽ được trình bày chi tiết về cách sử dụng và quản lý packages trong Golang, cùng với các quy tắc về visibility và cú pháp import.

Xem thêm Private Network là gì? tìm hiểu

Import trong Golang

Trong Golang, import được sử dụng để chèn (import) các packages từ các nguồn bên ngoài vào trong mã nguồn của chương trình. Cú pháp import trong Golang như sau:

import "tên_package"
import (
    "package1"
    "package2"
    ...
)

Các điểm cần lưu ý về import trong Golang:

  1. Tên package được import phải khớp với tên package được khai báo trong mã nguồn. Nếu không, chương trình sẽ báo lỗi.
  2. Nếu bạn chỉ muốn sử dụng một phần (những thành phần xuất (exported)) của package, bạn có thể sử dụng cú pháp sau:
import (
    "tên_package"
    alias "tên_package/thành_phần"
)

Trong đó, alias là một tên định danh mà bạn muốn sử dụng cho package hoặc thành phần của package đó trong mã nguồn của mình.

  1. Đối với các package thuộc thư viện chuẩn của Golang, bạn có thể import chúng bằng cách sử dụng cú pháp:
import "tên_package"

Ví dụ: import "fmt" để sử dụng package fmt.

  1. Ngoài việc import các package từ thư viện chuẩn của Golang, bạn cũng có thể import các package từ các nguồn bên ngoài như Github hoặc các package được viết bởi người dùng khác. Để làm điều này, bạn cần cung cấp đường dẫn của package đó. Ví dụ:
import "github.com/username/repository/package"

Trong đó, github.com/username/repository/package là đường dẫn đến package bạn muốn import.

Trên thực tế, khi sử dụng Golang, bạn sẽ sử dụng rất nhiều package từ các nguồn bên ngoài và thư viện chuẩn để xây dựng ứng dụng của mình. Việc sử dụng import một cách chính xác và hiệu quả giúp bạn sắp xếp và quản lý mã nguồn một cách tốt nhất.

Xem thêm Domain name là gì?

Visibility trong Golang

Visibility trong Golang đề cập đến khả năng truy cập và sử dụng các thành phần (biến, hàm, cấu trúc, …) trong một package từ các package khác. Trong Golang, có 4 mức độ visibility (khả năng nhìn thấy) cho các thành phần:

  1. Public visibility: Các thành phần được khai báo với chữ cái đầu tiên viết hoa được coi là public và có thể truy cập từ bất kỳ package nào. Ví dụ:
type Person struct {
    Name  string // public field
    email string // private field
}

func (p Person) GetName() string { // public method
    return p.Name
}

Trong ví dụ trên, trường Name và phương thức GetName() có thể truy cập từ các package khác.

  1. Private visibility: Các thành phần được khai báo với chữ cái đầu tiên viết thường được coi là private và chỉ có thể truy cập từ trong cùng package. Ví dụ:
type Person struct {
    Name  string // private field
    email string // private field
}

func (p Person) getName() string { // private method
    return p.Name
}

Trong ví dụ trên, trường Name và phương thức getName() chỉ có thể truy cập từ trong cùng package.

  1. Exported visibility: Để truy cập một thành phần từ một package khác, tên của thành phần phải được viết hoa chữ cái đầu tiên. Ví dụ:
package package1

type Person struct {
    Name  string // public field
    email string // private field
}
package package2

import "package1"

func main() {
    p := package1.Person{Name: "John"}
    fmt.Println(p.Name) // Truy cập trường Name từ package1
}

Trong ví dụ trên, package2 có thể truy cập trực tiếp vào trường Name của struct Person trong package1 vì nó là một exported field.

  1. Unexported visibility: Các thành phần không được khai báo với chữ cái đầu tiên viết hoa và không được xuất (exported) chỉ có thể truy cập từ trong cùng package. Ví dụ:
package package1

type person struct {
    name string // private field
}

Trong ví dụ trên, trường name chỉ có thể truy cập từ trong cùng package (package1).

Từ khóa visibility trong Golang giúp đảm bảo tính riêng tư và an toàn trong việc truy cập và sử dụng các thành phần của package.

Xem thêm Danh sách các pakage R

Ví dụ và minh họa visibility trong Golang

Dưới đây là một ví dụ minh họa về visibility trong Golang:

// file: person.go
package person

type Person struct {
    Name  string // public field
    email string // private field
}

func NewPerson(name, email string) Person {
    return Person{Name: name, email: email}
}

func (p Person) GetName() string {
    return p.Name
}

// file: main.go
package main

import (
    "fmt"
    "your-package/person"
)

func main() {
    p := person.NewPerson("John Doe", "john@example.com")
    fmt.Println(p.Name)        // Truy cập trường Name (public)
    fmt.Println(p.email)       // Lỗi: Trường email (private) không thể truy cập
    fmt.Println(p.GetName())   // Truy cập phương thức GetName() (public)
}

Trong ví dụ trên, chúng ta có package person chứa struct Person có hai trường: Name (public) và email (private). Chúng ta cũng có phương thức GetName() để lấy giá trị của trường Name.

Trong package main, chúng ta import package person và tạo một đối tượng Person bằng cách sử dụng hàm NewPerson() từ package person. Chúng ta có thể truy cập trực tiếp vào trường Name của đối tượng Person nhưng không thể truy cập trực tiếp vào trường email do nó là private. Chúng ta cũng có thể gọi phương thức GetName() để lấy giá trị của trường Name.

Với cấu trúc này, chúng ta đảm bảo tính riêng tư và an toàn của trường email và chỉ cho phép truy cập vào trường Name thông qua phương thức GetName().

Xem thêm Giới thiệu về Package trong Flutter

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now