Ví dụ đúc Golang

Vi Du Duc Golang



Quá trình thay đổi loại dữ liệu của một giá trị từ loại này sang loại khác được gọi là ép kiểu, đôi khi được gọi là chuyển đổi loại. Việc truyền kiểu được thực hiện trong Go bằng cách sử dụng chuyển đổi kiểu rõ ràng. Go hỗ trợ gõ mạnh. Vì vậy, khi chuyển đổi giữa các loại, chúng ta phải chỉ rõ mục tiêu của mình. Điều này thúc đẩy sự an toàn khi gõ và giảm xác suất mắc lỗi khi gõ. Trong bài viết này, chúng ta sẽ khám phá về cách truyền với các loại khác nhau trong Go.

Ví dụ 1: Golang Basic Type Casting

Hãy bắt đầu với ví dụ về truyền trực tiếp và cơ bản trong Go vì chúng tôi yêu cầu truyền kiểu để sửa đổi loại biến, ở bất kỳ đâu.

bưu kiện chủ yếu
nhập khẩu (
'fmt'
)
chức năng chủ yếu () {
đã từng là x int = 31
:= phao64 ( x )
fmt . Println ( )
}

Ở đây, chúng ta bắt đầu với hàm main bằng cách khai báo một biến có tên là “x” kiểu “int” và gán cho nó giá trị là 31. Sau đó, biến “y” được khai báo bằng cách sử dụng toán tử gán tốc ký “:=”. Loại “y” được tự động xác định từ biểu thức ở bên phải, đây là kết quả của việc chuyển đổi “x” thành “float64”. Vì vậy, trong chương trình này, giá trị của “x” được chuyển đổi thành “float64” và được gán cho “y”.







Các kết quả được lấy từ quá trình truyền cơ bản trong Go được hiển thị như sau:





Ví dụ 2: Golang Implicit Type Casting

Không cho phép truyền kiểu ẩn giữa các kiểu khác nhau. Go thực thi kiểu nhập mạnh, điều đó có nghĩa là chúng tôi không thể trực tiếp gán hoặc sử dụng giá trị của một loại này làm loại khác mà không có chuyển đổi rõ ràng. Trong phần sau đây, chúng tôi cố gắng thực hiện việc truyền ngầm tạo ra ngoại lệ bằng Go:





bưu kiện chủ yếu
nhập khẩu 'fmt'
chức năng chủ yếu () {
đã từng là số nguyên int = 9 . 08
fmt . inf ( 'Số nguyên là %g' , số nguyên )
}

Đây là đoạn mã bắt đầu bằng hàm main() trong đó một biến “số nguyên” được khai báo với kiểu “int”. Giá trị được gán cho biến 'số nguyên' là 9,08, đây là một số dấu phẩy động. Vì chúng ta đang cố gắng gán trực tiếp một giá trị dấu phẩy động cho một biến số nguyên nên sẽ dẫn đến lỗi không khớp kiểu. Sau đó, chúng tôi sử dụng hàm “printf” từ gói “fmt” để in giá trị của biến “số nguyên” bằng cách sử dụng công cụ xác định định dạng “%g”.

Đúng như dự đoán, việc truyền kiểu ẩn không được chấp nhận ở Golang. Việc truyền kiểu ẩn trước đó tạo ra lỗi sau:



Ví dụ 3: Truyền kiểu rõ ràng của Golang

Chuyển đổi loại rõ ràng cho phép chúng tôi chuyển đổi một cách an toàn các giá trị giữa các loại tương thích trong khi nêu rõ ý định. Nó đảm bảo rằng chúng tôi biết về chuyển đổi loại và giúp ngăn ngừa các lỗi loại ngẫu nhiên. Hãy xem xét việc truyền rõ ràng sau đây:

bưu kiện chủ yếu
nhập khẩu 'fmt'

chức năng chủ yếu () {
đã từng là floatVal phao32 = 6 . 75
đã từng là intVal int = int ( floatVal )
fmt . inf ( 'Giá trị thả nổi là %g \N ' , floatVal )
fmt . inf ( 'Giá trị số nguyên là %d' , intVal )
}

Tại đây, một biến “floatVal” được tạo với loại “float32” và được gán giá trị “6,75”. Sau đó, một biến “intVal” được khai báo với kiểu “int”. Để gán giá trị của floatVal cho intVal, chuyển đổi kiểu được sử dụng. Để chuyển đổi floatVal thành một giá trị số nguyên, hàm “int” được sử dụng với floatVal làm đầu vào. Sau đó, “fmt.Printf(“Giá trị float là %g\n”, floatVal)” in giá trị của floatVal bằng cách sử dụng công cụ xác định định dạng %g phù hợp để in các giá trị dấu phẩy động. Trong khi dòng mã “fmt.Printf(“Integer Value is %d”, intVal)” in giá trị của intVal bằng cách sử dụng công cụ xác định định dạng %d phù hợp để in các giá trị số nguyên.

Đầu ra sau đây tạo ra các giá trị cho cả floatVal và intVal sau khi truyền nó:

Ví dụ 4: Golang Type Casting để lấy giá trị trung bình

Tiếp theo, chúng ta thực hiện ép kiểu để lấy số trung bình cộng từ các giá trị đã cho. Hãy xem qua mã nguồn được cung cấp sau đây:

bưu kiện chủ yếu
nhập khẩu 'fmt'
chức năng chủ yếu () {
đã từng là tổng cộng int = 900
đã từng là Số của tôi int = hai mươi
đã từng là trung bình phao32
trung bình = phao32 ( tổng cộng ) / phao32 ( Số của tôi )
fmt . inf ( 'Trung bình là = %f \N ' , trung bình )
}

Ở đây, ban đầu chúng tôi khai báo ba biến. “Total” là một biến số nguyên được khởi tạo với giá trị 900. “MyNumber” là một biến số nguyên được khởi tạo với giá trị 20. Sau đó, giá trị trung bình được tính toán sẽ được lưu trữ trong biến “trung bình” float32. Công thức trung bình sau đó được đưa ra để thực hiện tính toán. Để đảm bảo rằng phép chia được thực hiện dưới dạng phép chia dấu phẩy động, các giá trị của “total” và “MyNumber” được chuyển đổi thành float32 bằng cách sử dụng chuyển đổi loại. Giá trị trung bình được tính toán được gán cho biến 'trung bình'. Cuối cùng, chuỗi định dạng “%f\n” được sử dụng trong hàm “printf” chỉ định rằng một giá trị float sẽ được in, theo sau là một ký tự xuống dòng.

Giá trị kết quả dưới dạng trung bình được tìm nạp sau khi ám chỉ kiểu truyền trong mã trước đó:

Ví dụ 5: Golang Int và String Type Casting

Ngoài ra, Go cũng cung cấp tính năng truyền giữa các kiểu Int và String. Chúng ta có thể thực hiện điều này bằng chức năng của gói strconv.

bưu kiện chủ yếu
nhập khẩu (
'fmt'
'strconv'
)
chức năng chủ yếu () {
đã từng là str sợi dây = '1999'
TRONG , _ := strconv . đoạn phim giới thiệu ( S )
fmt . Println ( TRONG )
đã từng là số nguyên int = 1999
toStr := strconv . chết đuối ( số nguyên )

fmt . Println ( toStr )
}

Đây là mã bắt đầu bằng việc khai báo hai biến. “str” là biến chuỗi được khởi tạo với giá trị “1999” và “integer” là biến số nguyên được khởi tạo với giá trị “1999”. Sau đó, hàm “strconv.Atoi()” được sử dụng để chuyển đổi chuỗi “str” thành giá trị số nguyên. Giá trị được trả về của “v” đại diện cho số nguyên được chuyển đổi và mã định danh “_” trống được sử dụng để bỏ qua bất kỳ lỗi tiềm ẩn nào được trả về bởi Atoi().

Tiếp theo, hàm strconv.Itoa() được sử dụng để chuyển đổi số nguyên thành giá trị chuỗi. Giá trị được trả về là “toStr” đại diện cho chuỗi đã chuyển đổi.

Đầu ra hiển thị chuyển đổi từ chuỗi “1999” thành một số nguyên và ngược lại thành chuỗi tạo ra giá trị ban đầu là “1999”:

Ví dụ 6: Truyền kiểu Golang giữa chuỗi và byte

Hơn nữa, việc ép kiểu trong Go cũng có thể được thực hiện theo kiểu chuỗi và kiểu byte. Các mã sau minh họa việc chuyển đổi giữa các chuỗi và lát byte:

bưu kiện chủ yếu
nhập khẩu (
'fmt'
)
chức năng chủ yếu () {
đã từng là bí ẩn sợi dây = 'Xin chào'
đã từng là b1 [] byte = [] byte ( myStr )
fmt . Println ( b1 )
toString := sợi dây ( b1 )
fmt . Println ( toString )
}

Ở đây, các biến được khai báo đầu tiên là “myStr” và “b1” được khởi tạo với các giá trị nhất định. Sau đó, biểu thức []byte(myStr) chuyển đổi chuỗi “myStr” thành một lát byte bằng cách sử dụng chuyển đổi loại. Nó gán lát cắt byte kết quả cho biến “b1”. Sau đó, biểu thức “chuỗi(b1)” chuyển đổi lát byte b1 trở lại thành một chuỗi bằng cách sử dụng chuyển đổi kiểu. Nó gán chuỗi kết quả cho biến “toString”.

Đầu ra cho thấy sự chuyển đổi giữa chuỗi “Hey There” và biểu diễn lát cắt byte tương ứng của nó như sau:

Ví dụ 7: Golang Type Casting để lấy căn bậc hai

Bây giờ, chúng ta thực hiện ép kiểu trong Go để tìm kết quả căn bậc hai. Mã được đặt như sau:

bưu kiện chủ yếu
nhập khẩu (
'fmt'
'toán học'
)
chức năng chủ yếu () {
đã từng là N int = 177
đã từng là SqrtN phao64
SqrtN = toán học . bình phương ( phao64 ( N ))
fmt . inf ( 'Căn bậc hai của %d là %.2f \N ' , N , SqrtN )
}

Ở đây, biến “n” được khai báo là int và gán giá trị là “144”. Biến “SqrtN” được khai báo là float64 và lưu trữ căn bậc hai đã tính của “n”. Sau đó, hàm math.Sqrt() được triển khai để tính căn bậc hai của “n”. Vì math.Sqrt() mong đợi một đối số float64 và giá trị của “n” được chuyển đổi thành float64 bằng cách sử dụng float64(n). Sau đó, chuỗi định dạng “Căn bậc hai của %d là %.2f\n” gọi trong hàm “printf” chỉ định giá trị số nguyên (%d) và giá trị dấu phẩy động (%.2f). Công cụ xác định độ chính xác “.2” trong “%.2f” đảm bảo rằng căn bậc hai được in với hai chữ số thập phân.

Đầu ra sau đây được tìm nạp cho biết căn bậc hai của giá trị đã cho:

Phần kết luận

Việc truyền trong Go được thảo luận với các ví dụ riêng biệt, tất cả đều có thể thực thi được. Hãy nhớ rằng trong Go, việc đánh máy là rõ ràng, giúp thực thi việc gõ mạnh và thúc đẩy độ rõ ràng và độ tin cậy của mã.