![[Learn Go with Tests] Iteration](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsPkiA%2FbtsIEnjQJD4%2FV8EKCvfx7Nu1cUaXnu2NuK%2Fimg.png)
[Learn Go with Tests] IterationLanguage/Go2024. 7. 18. 00:47
Table of Contents
728x90
해당 포스팅은 Learn Go with Tests Gitbook을 따라 실습한 내용을 정리한 문서입니다.
go에서는 반복적인 작업을 위해 오직 for문만 사용한다. while, do, until과 같은 키워드가 존재하지 않고 오직 for문만 사용하여 반복을 하게 된다.
테스트 작성하기
package iteration
import "testing"
func TestRepeat(t *testing.T) {
repeated := Repeat("a")
expected := "aaaaa"
if repeated != expected {
t.Errorf("expected %q but got %q", expected, repeated)
}
}
a를 반복해서 출력하는 테스트 코드를 작성하였다. 이를 통과할 수 있는 코드를 작성해보고자 한다.
package iteration
func Repeat(character string) string {
var repeated string
for i := 0; i < 5; i++ {
repeated = repeated + character
}
return repeated
}
- go 언어에서는 for문에서 3개의 컴포넌트를 둘러싼 괄호가 필요하지 않다.
- := 은 변수를 초기화 하고 선언하는 두단계를 줄인 것이다. 여기서는 명시적 버전을 사용했기 때문에 var repeated string을 사용하였다.
for 반복의 추가적인 형태
package main
import "fmt"
func main() {
i := 1
for i <= 3 {
fmt.Println(i)
i = i + 1
}
for j := 0; j < 3; j++ {
fmt.Println(j)
}
for i := range 3 {
fmt.Println("range", i)
}
for {
fmt.Println("loop")
break
}
for n := range 6 {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
}
- range를 이용하여 범위를 지정해준다. python과 마찬가지로 3일 경우 0부터 2까지의 범위에 해당한다.
- for문에 아무것도 안쓸수도 있다. 무한루프가 되며 break를 사용하여 탈출한다.
- continue의 경우 아래에 있는 for문을 수행하지 않는다. C언어의 for문과 유사하다.
리팩토링
func Repeat(character string) string {
var repeated string
for i := 0; i < 5; i++ {
repeated += character
}
return repeated
}
추가 할당 연산자를 사용하여 코드를 간결하게 할 수 있다.
성능 측정
func BenchmarkRepeat(b *testing.B) {
for i:=0; i<b.N ; i++{
Repeat("a")
}
}
- testing.B를 이용하여 b.N에 접근할 수 있다.
- 성능 측정 코드로 b.N번 실행되고 얼마나 오래 걸렸는지 측정한다.
- 성능측정을 하기 위해서 go test -bench=.를 한다 (혹시 Windows Powershell이라면 go test -bench="." 한다)
⇒ 이렇게 성능측정 결과를 볼 수 있다.
728x90
'Language > Go' 카테고리의 다른 글
[Learn Go with Tests] 포인터 & 에러 (1) | 2024.07.24 |
---|---|
[Learn Go with Tests] 구조체, 메서드 & 인터페이스 (0) | 2024.07.18 |
[Learn Go with Tests] 슬라이스 및 배열 (0) | 2024.07.18 |
[Learn Go with Tests] Integer (1) | 2024.07.18 |
[Learn Go with Tests] Hello World 및 테스트 실행 방법 (0) | 2024.07.18 |
@잉퓨_ :: 대학로에서 개발하기
보안 전공 개발자지만 대학로에서 살고 싶어요
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!