Golang 9

[Go] Benchmark 사용법 (How to Use Benchmarks)

개요Benchmark의 사용법  1. 기본 사용법func BenchmarkXxx(*testing.B) 의 형태를 가지고 있으면 벤치마크로 간주되며-bench 의 플러그가 있으면 go test 의 명령에 의해서 실행된다  샘플코드package main...func BenchmarkDeepCopyManual(b *testing.B) { original := Student{ Name: "Alice", Age: 21, Hobbies: []string{"Reading", "Cycling", "Swimming"}, Address: Address{ City: "San Francisco", State: "CA", }, } for i := 0; i 와 같이 작성해 xxx_test.go 의 ..

[Go] 2024.06.25

[Go] 구조체를 여러가지 방법으로 깊은 복사 하는 방법 + 성능비교 (How to deep copy a struct in various ways + Performance comparison)

개요구조체를 여러가지 방법으로 깊은 복사각 복사 방법의 성능 비교 (Benchmark)벤치마크 참고: https://dogfootman.com/14 [Go] Benchmark 사용법 (How to Use Benchmarks)개요Benchmark의 사용법   1. 기본 사용법func BenchmarkXxx(*testing.B) 의 형태를 가지고 있으면 벤치마크로 간주되며-bench 의 플러그가 있으면 go test 의 명령에 의해서 실행된다  샘플코드package main...fdogfootman.com  1. 수동으로 깊은 복사package mainimport "fmt"type Address struct { City string State string}type Student struct { ..

[Go] 2024.06.25

[Go] 제네릭 사용 예 (Example of using generics)

개요go 1.18에서 추가 된 제네릭의 사용 예   1. 함수에서의 사용package mainimport "fmt"func Filter[T any](list []T, predicate func(T) bool) []T { var result []T for _, v := range list { if predicate(v) { result = append(result, v) } } return result}func main() { // 짝수만 필터 nums := []int{1, 2, 3, 4, 5, 6} evens := Filter(nums, func(n int) bool { return n%2 == 0 }) fmt.Println(evens) // [2 4 6] // 길이가 5가 넘는 문자열만 필터..

[Go] 2024.06.23

[Go] 고랭에서의 예외처리 (exception handling in golang)

개요 예외 처리:많은 언어에서 예외는 프로그램 실행 중에 발생하는 비정상적인 상황을 처리하기 위한 메커니즘예외는 try-catch 블록을 사용하여 처리  패닉 처리:Go 언어에서는 패닉은 프로그램이 정상적으로 계속 실행될 수 없는 심각한 오류가 발생했을 때 사용패닉이 발생하면 현재 고루틴은 즉시 중단되고, defer로 등록된 함수들이 호출된 후 프로그램이 종료recover를 사용하여 패닉을 복구할 수 있지만, 일반적인 오류 처리 메커니즘으로 사용되지는 않음   1. panic이 발생하는 프로그램package mainimport "fmt"func main() { fmt.Println("Start!!") divide(10, 0) fmt.Println("End")}func divide(x, y..

[Go] 2024.06.22

[Go] import cycle not allowed - 해결 방안1: interface를 활용한 해결 방안

개요이전 import cycle not allowed 에러를 인터페이스를 활용해 해결https://dogfootman.com/9 [Go] import cycle not allowed - 예제개요import cycle not allowed가 발생하는 경우+---------------------+ +----------------------+| user 패키지 | | board 패키지 || | | || +-----------------+ | | +------------------+ || | User Struct | | | | Post Struct | || +-----------------+ |dogfootman.com    1. 프로젝트 구조/dependency2│├── main.go├── user│ └─..

[Go] 2024.06.18

[Go] 슬라이스의 얕은 복사와 깊은 복사 (Shallow Copy and Deep Copy of Slices)

개요 슬라이스의 얕은 복사와 깊은 복사에 대해서 1. 얕은 복사 package main import ( "fmt" "sort" ) type obj struct { Name string Age int32 } func main() { list1 := []*obj{ {Name: "A", Age: 1}, {Name: "B", Age: 2}, {Name: "C", Age: 3}, } list2 := list1 sort.Slice(list2, func(i, j int) bool { return list2[i].Age < list2[j].Age }) fmt.Printf("List1 [%p]\n", list1) for _, item := range list1 { fmt.Printf("Name: %s, Age: %d [..

[Go] 2023.08.03

[Go] golang sort.Slice를 사용할때의 주의점 sort.SliceStable와의 차이점 (Important Considerations When Using golang sort.Slice and Differences from sort.SliceStable)

개요 sort.Slice를 사용했을때와 sort.SliceStable를 사용했을때의 결과를 비교 1. sort.Slice package main import ( "fmt" "sort" ) type Person struct { Name string Age int } func main() { people := []Person{ {"Alice", 30}, {"Bob", 30}, {"Charlie", 30}, {"David", 30}, {"Eve", 30}, {"Alice", 10}, {"Bob", 10}, {"Charlie", 10}, {"David", 10}, {"Eve", 10}, {"Alice", 20}, {"Bob", 20}, {"Charlie", 20}, {"David", 20}, {"Eve", 20..

[Go] 2023.07.27

[Go] 고랭으로 간단한 HTTP Server 작성 (Writing a simple HTTP Server with Golang)

개요 고랭으로 HTTP 서버 작성 1. Hello World func main() { http.HandleFunc("/", handler) fmt.Println("Start Http Server: http://localhost:8080") err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println("Error:", err) } } http.DefaultServeMux에 기본적으로 핸들러가 등록 포트를 지정해서 대기 func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") } 핸들러 작성 결과 값 확인 2. 임의 로그인 api 작성 func main..

[Go] 2023.07.23