이 기사에서는 Go 언어의 두 가지 효율적인 팁을 공유합니다. 하나는 + 및 fmt.Sprintf를 사용하여 문자열을 작동하지 않는 것이고, 다른 하나는 고정 필드 [문자열] 인터페이스의 키-값 쌍에 대해 맵 대신 임시 구조체를 사용하는 것입니다. {}.
+는 문자열을 조작하는 데 매우 편리하지만 Go 언어에서 +를 사용하면 프로그램이 스크립트 언어보다 빠르게 실행됩니다. 믿으신다면 직접 테스트를 해보고, + 연산을 사용하고, 100,000번 반복하면 Python과 Javascript가 Go보다 훨씬 빠릅니다(많이, 조금은 아님)
func TestStr(t *testing.T) { str := "" for i := 0; i < 100000; i++ { str += "test" } }
테스트 결과
PASS: TestStr(3.32s)
str="" for i in range(100000): str+="test"/테스트 결과: ~/»Time Python Test.py
0.03s SYSTEM 81% CPU 0.078 Total
정적 언어로 GO, 실제로 Python Times보다 이렇게 간단한 코드에서 100의 효율성을 수행한다는 사실이 놀랍죠? Go 문제는 아니지만 +를 사용하여 Go에서 문자열을 처리하는 것은 성능 집약적이며 Python은 + 작업 문자열 최적화에 과부하가 걸렸어야 합니다. (Javascript + 연산 문자열도 매우 빠릅니다.)관련 튜토리얼:
go 비디오 튜토리얼
strBuf := bytes.NewBufferString("") for i := 0; i < 100000; i++ { strBuf.WriteString("test") }결과는 직접 테스트할 수 있으므로 놀랄 것입니다
func TestStr(t *testing.T) { a, b := "Hello", "world" for i := 0; i < 1000000; i++ { fmt.Sprintf("%s%s", a, b) //strings.Join([]string{a, b}, "") } }PASS: TestStr(0.29s)
func TestStr(t *testing.T) { a, b := "Hello", "world" for i := 0; i < 1000000; i++ { //fmt.Sprintf("%s%s", a, b) strings.Join([]string{a, b}, "") } }PASS: TestStr(0.09s) 결과에 따르면 strings.Join은 Sprint를 사용하는 것보다 약 4배 빠릅니다. 2. 고정 필드의 키-값 쌍의 경우 map[string]인터페이스 대신 임시 구조체를 사용하세요.{}간단한 예
func TestData(t *testing.T) { for i := 0; i < 100000000; i++ { var a struct { Name string Age int } a.Name = "Hello" a.Age = 10 } }
func TestData2(t *testing.T) { for i := 0; i < 100000000; i++ { var a = map[string]interface{}{} a["Name"] = "Hello" a["Age"] = 10 } }PASS: TestData2(38.30s) 효율이 수천배 다릅니다!
필드가 알려진 경우 임시 구조체를 사용하면 런타임 중에 콘텐츠의 동적 할당이 필요하지 않으며 맵처럼 인덱스를 확인할 필요가 없으므로 속도가 훨씬 빨라집니다.
위 내용은 Go 언어의 두 가지 효율적인 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!