“Các kiểu dữ liệu trong Golang” là một khía cạnh quan trọng trong việc lập trình bằng ngôn ngữ Golang. Golang cung cấp một loạt các kiểu dữ liệu cơ bản để lưu trữ và xử lý thông tin. Dưới đây là một số kiểu dữ liệu quan trọng trong Golang:
Các bài viết liên quan:
Các kiểu dữ liệu trong GOLang
Kiểu dữ liệu số (Numeric):
Kiểu dữ liệu số trong Golang bao gồm các kiểu dữ liệu để lưu trữ các giá trị số. Dưới đây là các kiểu dữ liệu số phổ biến trong Golang:
int
: Đại diện cho các số nguyên có kích thước phụ thuộc vào nền tảng cụ thể. Thường là 32-bit hoặc 64-bit.int8
,int16
,int32
,int64
: Đại diện cho các số nguyên có kích thước cố định là 8-bit, 16-bit, 32-bit và 64-bit tương ứng.uint
: Đại diện cho các số nguyên không âm có kích thước phụ thuộc vào nền tảng cụ thể. Thường là 32-bit hoặc 64-bit.uint8
,uint16
,uint32
,uint64
: Đại diện cho các số nguyên không âm có kích thước cố định là 8-bit, 16-bit, 32-bit và 64-bit tương ứng.float32
,float64
: Đại diện cho các số thực có độ chính xác đơn và đôi tương ứng.complex64
,complex128
: Đại diện cho các số phức với phần thực và phần ảo, sử dụng các kiểu float32 và float64 tương ứng.
Ví dụ:
package main import "fmt" func main() { var a int = 10 var b float64 = 3.14 var c complex128 = 1 + 2i var d bool = true fmt.Println(a) // Output: 10 fmt.Println(b) // Output: 3.14 fmt.Println(c) // Output: (1+2i) fmt.Println(d) // Output: true }
Kiểu dữ liệu chuỗi (String):
Kiểu dữ liệu chuỗi trong Golang được sử dụng để lưu trữ và xử lý dữ liệu dạng chuỗi ký tự. Chuỗi trong Golang là một chuỗi các byte và có thể chứa bất kỳ ký tự Unicode nào.
Ví dụ:
package main import "fmt" func main() { var message string = "Hello, World!" fmt.Println(message) // Output: Hello, World! }
Xem thêm Mapping từ page table đến main memory trong hệ điều hành
Kiểu dữ liệu logic (Boolean):
Kiểu dữ liệu logic trong Golang đại diện cho hai giá trị là true (đúng) và false (sai). Các giá trị logic được sử dụng trong các biểu thức điều kiện và kiểm tra logic.
Ví dụ:
goCopy codepackage main import "fmt" func main() { var isTrue bool = true var isFalse bool = false fmt.Println(isTrue) // Output: true fmt.Println(isFalse) // Output: false var result bool = 10 > 5 fmt.Println(result) // Output: true }
Kiểu dữ liệu mảng (Array):
Kiểu dữ liệu mảng trong Golang cho phép lưu trữ một tập hợp các phần tử cùng kiểu dữ liệu trong một vùng nhớ liên tiếp. Mảng được khai báo với một kích thước cố định và không thay đổi sau khi được khởi tạo.
Ví dụ:
package main import "fmt" func main() { var numbers [5]int = [5]int{1, 2, 3, 4, 5} fmt.Println(numbers) // Output: [1 2 3 4 5] fmt.Println(numbers[0]) // Output: 1 fmt.Println(numbers[2]) // Output: 3 // Sử dụng vòng lặp để truy cập các phần tử trong mảng for i := 0; i < len(numbers); i++ { fmt.Println(numbers[i]) } }
Trong ví dụ trên, chúng ta đã khai báo một mảng numbers
gồm 5 phần tử nguyên. Chúng ta có thể truy cập và hiển thị các phần tử của mảng bằng cách sử dụng chỉ số. Bên cạnh đó, chúng ta cũng có thể sử dụng vòng lặp để duyệt qua tất cả các phần tử trong mảng.
Xem thêm Slice trong GOLang
Kiểu dữ liệu cấu trúc (Struct):
Kiểu dữ liệu cấu trúc trong Golang cho phép bạn tự định nghĩa một kiểu dữ liệu mới bằng cách kết hợp các kiểu dữ liệu có sẵn thành một đơn vị. Một cấu trúc được định nghĩa bằng từ khóa type
và struct
.
Ví dụ:
package main import "fmt" type Person struct { name string age int city string } func main() { var person1 Person person1.name = "John Doe" person1.age = 30 person1.city = "New York" fmt.Println(person1.name) // Output: John Doe fmt.Println(person1.age) // Output: 30 fmt.Println(person1.city) // Output: New York }
Trong ví dụ trên, chúng ta đã định nghĩa một cấu trúc Person
với các trường name
, age
, và city
. Chúng ta có thể khởi tạo một biến thuộc kiểu Person
và truy cập các trường thông qua biến đó.
Kiểu dữ liệu con trỏ (Pointer):
Kiểu dữ liệu con trỏ trong Golang cho phép bạn lưu trữ địa chỉ bộ nhớ của một biến hoặc đối tượng. Con trỏ được sử dụng để tham chiếu và truy cập trực tiếp vào vùng nhớ.
Ví dụ:
package main import "fmt" func main() { var number int = 42 var pointer *int = &number fmt.Println(*pointer) // Output: 42 *pointer = 100 fmt.Println(number) // Output: 100 }
Trong ví dụ trên, chúng ta đã khai báo một biến number
có giá trị là 42. Sau đó, chúng ta khai báo một con trỏ pointer
trỏ tới địa chỉ của biến number
. Bằng cách sử dụng toán tử *
, chúng ta có thể truy cập và thay đổi giá trị của biến thông qua con trỏ.
Xem thêm Slice trong javascript là gì ?
Kiểu dữ liệu Slice:
Kiểu dữ liệu Slice trong Golang là một cấu trúc dữ liệu linh hoạt để lưu trữ và xử lý một tập hợp các phần tử cùng kiểu dữ liệu. Slice không có kích thước cố định và có thể thay đổi kích thước trong quá trình chạy.
Ví dụ:
package main import "fmt" func main() { var numbers []int = []int{1, 2, 3, 4, 5} fmt.Println(numbers) // Output: [1 2 3 4 5] fmt.Println(numbers[0]) // Output: 1 fmt.Println(numbers[2]) // Output: 3 // Thay đổi giá trị của phần tử trong slice numbers[1] = 10 fmt.Println(numbers) // Output: [1 10 3 4 5] // Thêm phần tử vào slice numbers = append(numbers, 6) fmt.Println(numbers) // Output: [1 10 3 4 5 6] // Cắt một phần của slice slice := numbers[1:4] fmt.Println(slice) // Output: [10 3 4] }
Trong ví dụ trên, chúng ta đã khai báo một slice numbers
chứa các phần tử nguyên. Chúng ta có thể truy cập và thay đổi giá trị của các phần tử trong slice. Bên cạnh đó, chúng ta cũng có thể thêm phần tử vào slice bằng phương thức append
và cắt một phần của slice bằng cách chỉ định chỉ số của các phần tử.
Xem thêm Đối số dòng lệnh trong GOLang
Kiểu dữ liệu Map:
Kiểu dữ liệu Map trong Golang là một cấu trúc dữ liệu để lưu trữ cặp khóa-giá trị không tuần tự. Một map trong Golang có thể được xem như một bảng băm, trong đó mỗi khóa chỉ định một giá trị tương ứng.
Ví dụ:
package main import "fmt" func main() { var ages map[string]int = map[string]int{ "John": 30, "Jane": 25, "Alice": 35, } fmt.Println(ages["John"]) // Output: 30 fmt.Println(ages["Jane"]) // Output: 25 // Thêm một cặp khóa-giá trị vào map ages["Bob"] = 40 fmt.Println(ages) // Output: map[John:30 Jane:25 Alice:35 Bob:40] // Xóa một cặp khóa-giá trị khỏi map delete(ages, "Jane") fmt.Println(ages) // Output: map[John:30 Alice:35 Bob:40] }
Trong ví dụ trên, chúng ta đã khai báo một map ages
để lưu trữ tuổi của các người. Chúng ta có thể truy cập và thay đổi giá trị bằng cách sử dụng khóa tương ứng. Bên cạnh đó, chúng ta cũng có thể thêm và xóa các cặp khóa-giá trị trong map.
Xem thêm Báo lỗi (ERROR) trong Golang
Kiểu dữ liệu Interface:
Kiểu dữ liệu Interface trong Golang là một tập hợp các phương thức mà một đối tượng cần triển khai để thỏa mãn giao diện đó.
package main import "fmt" type Shape interface { Area() float64 Perimeter() float64 } type Rectangle struct { width float64 height float64 } func (r Rectangle) Area() float64 { return r.width * r.height } func (r Rectangle) Perimeter() float64 { return 2*r.width + 2*r.height } type Circle struct { radius float64 } func (c Circle) Area() float64 { return 3.14 * c.radius * c.radius } func (c Circle) Perimeter() float64 { return 2 * 3.14 * c.radius } func PrintShapeInfo(s Shape) { fmt.Printf("Area: %.2f\n", s.Area()) fmt.Printf("Perimeter: %.2f\n", s.Perimeter()) } func main() { rect := Rectangle{width: 5, height: 3} PrintShapeInfo(rect) circle := Circle{radius: 2} PrintShapeInfo(circle) }
Trong ví dụ trên, chúng ta đã định nghĩa một interface Shape
với hai phương thức Area
và Perimeter
. Sau đó, chúng ta đã triển khai interface Shape
cho hai kiểu cấu trúc Rectangle
và Circle
. Trong hàm PrintShapeInfo
, chúng ta có thể truyền một đối tượng thuộc bất kỳ kiểu nào triển khai interface Shape
, và hàm sẽ tính toán và in ra diện tích và chu vi tương ứng.
Xem thêm Multi-layer Perceptron trong TensorFlow
Kiểu dữ liệu Function:
Kiểu dữ liệu Function trong Golang cho phép bạn định nghĩa và sử dụng các hàm như một loại dữ liệu. Bạn có thể gán hàm cho biến, truyền hàm như tham số của hàm khác, và trả về hàm từ một hàm khác.
Ví dụ:
package main import "fmt" func Add(a, b int) int { return a + b } func Subtract(a, b int) int { return a - b } func Multiply(a, b int) int { return a * b } func main() { var operation func(int, int) int operation = Add fmt.Println(operation(5, 3)) // Output: 8 operation = Subtract fmt.Println(operation(5, 3)) // Output: 2 operation = Multiply fmt.Println(operation(5, 3)) // Output: 15 }
Trong ví dụ trên, chúng ta đã định nghĩa ba hàm Add
, Subtract
, và Multiply
để thực hiện các phép tính cộng, trừ, và nhân. Chúng ta cũng đã khai báo một biến operation
có kiểu dữ liệu là một hàm có hai tham số int
và trả về một giá trị int
. Bằng cách gán các hàm vào biến `operation
Xem thêm Reflection trong Golang