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

[Golang] Concatenation Strings

0 0 8

Người đăng: Open Dev

Theo Viblo Asia

  • Bài viết này để giúp việc viết function nối string array string -> string một cách tối ưu nhất.
  • Thông thường khi viết một function để chuyển đổi từ array string sang một string thì đa số anh/em dev golang sẽ viết.
func Concat(values []string) string { s := "" for _, value := range values { s += value } return s
}
  • Cách viết không tối ưu, trong golang khi nối chuỗi sẽ không dùng lại biến s mà luôn tạo ra một vùng nhớ mới trên memory.
  • Để tối ưu, có 2 cách viết mẫu:

Cách 1

func Concatv2(values []string) string { sb := strings.Builder{} // (1) for _, value := range values { _, _ = sb.WriteString(value) // (2) } return sb.String() // (3)
}
  • (1): tạo một strings.Builder
  • (2): nối chuỗi
  • (3): trả về kết quả

Cách 2

func Concatv3(values []string) string { total := 0 for i := 0; i < len(values); i++ { // (1) total += len(values[i]) } sb := strings.Builder{} sb.Grow(total) // (2) for _, value := range values { _, _ = sb.WriteString(value) } return sb.String()
}
  • (1): vòng lặp mỗi string để đếm tổng số bytes.
  • (2): tạo capacity, Grow có thể bị panics, cẩn thận khi sài.

Benchmark

  • tạo file main_test.go, copy code dưới đây.
package main import "testing" var strs = []string{"b111231sdfsdfsaf21312sdafsda", "b111231sdfsdfsaf21312sdafsda", "b111231sdfsdfsaf21312sdafsda", "b111231sdfsdfsaf21312sdafsda"} func BenchmarkV1(b *testing.B) { for i := 0; i < b.N; i++ { Concat(strs) }
} func BenchmarkV2(b *testing.B) { for i := 0; i < b.N; i++ { Concatv2(strs) }
} func BenchmarkV3(b *testing.B) { for i := 0; i < b.N; i++ { Concatv3(strs) }
}
  • thực hiện câu lệnh:
go test -bench=.

go test -bench=. -benchmem

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 112

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

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

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

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

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