전체 글 13

[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

[ETC] Postman API호출에서 앞의 처리에서 취득한 정보를 포함 하고 싶을때 (When you want to include the information obtained in the previous process in the Postman API call)

개요호출 하고 싶은 API가 이전 처리의 결과값을 필요로 할때ex) 인증 정보등Pre-request Script를 사용해서 데이터를 포함  처리 순서인증 API 호출-> 인증 API의 response의 token취득-> 호출 하고싶은 API의 해더값에 token 설정-> 호출 하고싶은 API의 호출  0. 테스트용 API로 이전 Golang으로 작성 서버 사용https://dogfootman.com/5 [Go] 고랭으로 간단한 HTTP Server 작성 (Writing a simple HTTP Server with Golang)개요 고랭으로 HTTP 서버 작성 1. Hello World func main() { http.HandleFunc("/", handler) fmt.Println("Start Htt..

[ETC] 2023.07.23

[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