Lộ trình học Golang (Phần 2)

0 0 0

Người đăng: Ông Huy Thắng

Theo Viblo Asia

Getting Started

Tóm tắt lại bài trước:

  1. Go Module là gì?
  • Là đơn vị mã nguồn độc lập trong Go.
  • Mỗi module có go.mod chứa thông tin: tên module, các thư viện phụ thuộc, version...

Ví du:

go mod init example.com/hello
==> Tạo ra module example.com/hello, và file go.mod.
  1. Go Workspaces (go.work) là gì?

Là cách để làm việc với nhiều module cùng lúc, trong 1 project.

Vì sao cần workspace?

Khi bạn có nhiều module liên quan (VD: hello, greetings), và muốn:

  • Thay đổi cả hai cùng lúc.
  • Test giao tiếp giữa chúng mà không phải dùng go get tải từ internet.

Ví du:

project/
├── go.work
├── hello/ --> module 1 (ứng dụng chính)
│ └── go.mod
├── greetings/ --> module 2 (thư viện con) └── go.mod

Trong go.work:

go work init ./hello ./greetings

File go.work:

go 1.21 use ( ./hello ./greetings
)

==> Giúp Go nhận diện tất cả module trong workspace, dùng trực tiếp code local, không cần tải qua mạng.

Tutorial: Getting started with multi-module workspaces

Giới thiệu các khái niệm cơ bản về việc tạo và sử dụng workspace đa module trong Go. Workspace đa module hữu ích khi bạn muốn thực hiện các thay đổi trên nhiều module cùng lúc.

Hướng dẫn này giới thiệu các khái niệm cơ bản về workspace đa module trong Go. Với workspace đa module, bạn có thể thông báo cho lệnh go rằng bạn đang viết mã trên nhiều module cùng lúc và dễ dàng build và chạy mã trong các module đó.

Tạo một module cho mã nguồn của bạn

$ mkdir hello
$ cd hello
$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello

Thêm phụ thuộc đến package golang.org/x/example/hello/reverse bằng lệnh:

$ go get golang.org/x/example/hello/reverse

Tạo file hello.go trong thư mục hello với nội dung:

package main import ( "fmt" "golang.org/x/example/hello/reverse"
) func main() { fmt.Println(reverse.String("Hello"))
}

Chạy chương trình:

$ go run .
olleH

Tạo workspace

Bây giờ bạn sẽ tạo file go.work để chỉ định workspace với các module.

Tại thư mục workspace, chạy:

$ go work init ./hello

Lệnh trên tạo file go.work cho workspace chứa module trong ./hello.

Dòng go chỉ định version của Go dùng để hiểu file.

Dòng use nói với Go rằng module trong thư mục hello sẽ là module chính khi build.

Vì vậy, ở bất kỳ thư mục con nào của workspace, module này sẽ được kích hoạt.

Chạy chương trình từ thư mục workspace $ go run ./hello
olleH

Lệnh go run hoạt động vì Go biết module nằm ở đâu nhờ go.work. Nếu bạn chạy bên ngoài workspace hoặc không có file này, lệnh sẽ thất bại.

Tải và chỉnh sửa module golang.org/x/example/hello

Tiếp theo, bạn sẽ tải source code của module golang.org/x/example/hello, thêm nó vào workspace, và thêm một hàm mới vào package reverse.

Clone repository Từ thư mục workspace, chạy:

$ git clone https://go.googlesource.com/example

Thêm module vào workspace

Module nằm trong ./example/hello, thêm vào workspace:

$ go work use ./example/hello

Nội dung file go.work lúc này sẽ là:

Giờ workspace đã bao gồm cả module example.com/hellogolang.org/x/example/hello.

Thêm hàm mới

Tạo một file mới tên int.go trong workspace/example/hello/reverse:

Chỉnh sửa file hello

Từ thư mục workspace, chạy:

$ go run ./hello
olleH 10642

  • Go sẽ tìm module từ các thư mục được chỉ định trong go.work.
  • Workspace giúp bạn không cần dùng replace trong go.mod mà vẫn có thể chỉnh sửa và kiểm thử nhiều module cùng lúc.

Bước tiếp theo (Future step)

Để phát hành module, bạn cần tạo release, ví dụ v0.1.0 bằng cách tag trong Git. Sau đó, bạn có thể cập nhật module này từ module hello như sau:

cd hello
go get golang.org/x/example/hello@v0.1.0

Tìm hiểu thêm về workspace

Một số lệnh bổ sung làm việc với workspace:

  • go work use [-r] [dir]: thêm thư mục vào go.work. Nếu -r được dùng, sẽ đệ quy trong thư mục con.
  • go work edit: chỉnh sửa file go.work tương tự như go mod edit.
  • go work sync: đồng bộ phụ thuộc từ workspace vào từng module

Xem thêm tại: https://go.dev/ref/mod#workspaces

Bình luận

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

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

gRPC - Nó là gì và có nên sử dụng hay không?

Nhân một ngày rảnh rỗi, mình ngồi đọc lại RPC cũng như gRPC viết lại để nhớ lâu hơn. Vấn đề là gì và tại sao cần nó .

0 0 150

- 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 68

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

Tạo Resful API đơn giản với Echo framework và MySQL

1. Giới thiệu.

0 0 75

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

Sử dụng goquery trong golang để crawler thông tin các website Việt Nam bị deface trên mirror-h.org

. Trong bài viết này, mình sẽ cùng mọi người khám phá một package thu thập dữ liệu có tên là goquery của golang. Mục tiêu chính của chương trình crawler này sẽ là lấy thông tin các website Việt Nam bị deface (là tấn công, phá hoại website, làm thay đổi giao diện hiển thị của một trang web, khi người

0 0 251

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

Tạo ứng dụng craw dữ liệu bing với Golang, Mysql driver

Chào mọi người . Lâu lâu ta lại gặp nhau 1 lần, để tiếp tục series chia sẻ kiến thức về tech, hôm nay mình sẽ tìm hiểu và chia sẻ về 1 ngôn ngữ đang khá hot trong cộng đồng IT đó là Golang.

0 0 88

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

Golang: Rest api and routing using MUX

Routing with MUX. Let's create a simple CRUD api for a blog site. # All . GET articles/ .

0 0 68