Go를 만지는 1.18.
차리다
brew install go
라면generics
개요
시험해 보다
main.go
// SumInts adds together the values of m.
func SumInts(m map[string]int64) int64 {
var s int64
for _, v := range m {
s += v
}
return s
}
// SumFloats adds together the values of m.
func SumFloats(m map[string]float64) float64 {
var s float64
for _, v := range m {
s += v
}
return s
}
func main() {
// Initialize a map for the integer values
ints := map[string]int64{
"first": 34,
"second": 12,
}
// Initialize a map for the float values
floats := map[string]float64{
"first": 35.98,
"second": 26.99,
}
fmt.Printf("Non-Generic Sums: %v and %v\n",
SumInts(ints),
SumFloats(floats))
}
main.go
// SumIntsOrFloats sums the values of map m. It supports both int64 and float64
// as types for map values.
func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V {
var s V
for _, v := range m {
s += v
}
return s
}
fuzz
개요
시험해 보다
main.go
func Reverse(s string) (string, error) {
b := []byte(s)
for i, j := 0, len(b)-1; i < len(b)/2; i, j = i+1, j-1 {
b[i], b[j] = b[j], b[i]
}
return string(b)
}
func main() {
input := "The quick brown fox jumped over the lazy dog"
rev := Reverse(input)
doubleRev := Reverse(rev)
fmt.Printf("original: %q\n", input)
fmt.Printf("reversed: %q\n", rev)
fmt.Printf("reversed again: %q\n", doubleRev)
}
The quick brown fox jumped over the lazy dog
가 있다고 생각하면 모든 자모를 사용하는 유명한 언어 게임인 것 같다go test -fuzz=Fuzz
의 fuzingfunc Reverse(s string) (string, error) {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
테스트가
t.Logf()
에서 fail을 진행하거나 v 옵션을 추가했을 때만 표준 출력go test -fuzz=Fuzz
main.go
func Reverse(s string) (string, error) {
if !utf8.ValidString(s) {
return s, errors.New("input is not valid UTF-8")
}
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r), nil
}
go test -run ${FuzzTestName}/${filename}
에서 특정 파일의 테스트 용례를 실행할 수 있음go test -fuzz=Fuzz
-fuzztime 30s
처럼 시간 지정❯ go test -fuzz=Fuzz -fuzztime 5s
fuzz: elapsed: 0s, gathering baseline coverage: 0/43 completed
fuzz: elapsed: 0s, gathering baseline coverage: 43/43 completed, now fuzzing with 12 workers
fuzz: elapsed: 3s, execs: 757072 (252347/sec), new interesting: 2 (total: 45)
fuzz: elapsed: 5s, execs: 1242894 (228431/sec), new interesting: 2 (total: 45)
PASS
ok example/fuzz 5.251s
감상
이번 Go의 가장 큰 업데이트는 주요 2가지 기능을 터치했지만 실제 제품은 당장 전투력으로 처리할 수 있는 수준이라고 느꼈다.
Go 공식의 강좌는 간단하면서도 좋다.새로운 기능이 있으면 다시 만지고 싶어요.
Reference
이 문제에 관하여(Go를 만지는 1.18.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/cohky/articles/go-1-18-tutorial텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)