본문 바로가기

프로그래밍/Golang28

Golang string 과 rune / 한글(멀티바이트) 이슈 개요Go 언어에서 문자열(string)과 룬(rune)은 텍스트를 다룰때 주의할점과 특징들에 대해서 알아보겠습니다.string(문자열)Go에서 string은 불변(immutable)의 바이트 슬라이스입니다. 기본적으로 UTF-8로 인코딩된 텍스트를 나타내는 데 사용됩니다. 특징읽기 전용: 한 번 생성된 문자열은 변경할 수 없습니다.UTF-8 인코딩: 기본적으로 UTF-8을 사용합니다.인덱싱: 개별 바이트에 접근할 수 있지만, 항상 유효한 유니코드 문자를 반환하지는 않습니다.예제s := "Hello, 월드"fmt.Println(len(s)) // 13 (바이트 수)fmt.Println(s[0]) // 72 (ASCII 값 'H') rune(룬)rune은 Go에서 유니코드 코드 포인트를 나타내는 타입입니.. 2024. 8. 6.
Golang: 동일성(Identity) vs 동등성(Equality) 개요동일성(Identity), 동등성(Equality) 두 개념의 차이점과 Go언어에서의 적용 방법에 대해 알아보겠습니다.Identity (동일성)정의Identity는 두 변수가 메모리 상에서 정확히 같은 객체를 가리키고 있는지를 나타냅니다.특징주로 포인터 비교에 사용`==` 연산자로 비교메모리 주소를 비교예시type Person struct { Name string Age int}p1 := &Person{"Alice", 30}p2 := &Person{"Alice", 30}p3 := p1fmt.Println(p1 == p2) // false (다른 메모리 주소)fmt.Println(p1 == p3) // true (같은 메모리 주소) Equality (동등성)정의Equality는 두 값의 내.. 2024. 8. 3.
Golang 값을 전달할까, 포인터를 전달할까? 개요Go 언어를 사용하다 보면 함수에 값을 전달할지, 아니면 포인터를 전달할지 고민하게 되는 상황이 자주 발생합니다.Go에서 값 전달과 포인터 전달의 차이점을 이해하고, 각각의 장단점을 비교하여 어떤 경우에 무엇을 선택해야 하는지 알아보겠습니다. 값 전달 (Pass by Value)값 전달은 함수에 인수를 전달할 때 그 값을 복사하여 전달하는 방식입니다. 이 경우 함수 내에서 인수의 값을 변경해도 원본 값에는 영향을 미치지 않습니다. 장점안전성: 값이 복사되므로 함수 내에서 값이 변경되더라도 원본 데이터가 보호됩니다.단순성: 포인터를 사용하지 않으므로 코드가 단순하고 직관적입니다.단점성능 문제: 큰 구조체나 배열을 복사할 때 메모리 사용량이 증가하고 성능이 저하될 수 있습니다.변경 불가: 함수 내에서 값.. 2024. 8. 2.
Golang map(맵) : 기본개념 개요Go maps in action 의 내용을 참고해서, Golang map기본 개념에 대해서 알아보겠습니다.1. 기본 구조와 선언1.1 map(맵)의 기본 구조map[타입]값map[KeyType]ValueType타입: 비교 가능한 모든 타입이 올 수 있습니다.값: 어떤 타입이든 올 수 있으며, 다른 맵도 포함될 수 있습니다.1.2 map(맵) 변수 선언문자열 키와 정수 값을 가지는 맵 변수를 선언하고 싶다면, 다음과 같이 표현 할 수 있습니다. var m map[string]int1.3 map(맵)의 특성map(맵)은 포인터나 슬라이스와 같은 참조 타입입니다.위와 같이 선언만 한 맵 m의 값은 nil입니다.nil 맵은 읽을 때는 빈 맵처럼 동작하지만, 쓰기를 시도하면 런타임 패닉이 발생합니다.1.4 m.. 2024. 8. 1.
Golang Slice(슬라이스) 요소 제거하기 개요Golang slice(슬라이스) 요소 제거하는 법에 대해 알아보겠습니다. 1. 인덱스를 사용하여 요소 제거slice := []int{1, 2, 3, 4, 5}index := 2 // 제거할 요소의 인덱스slice = append(slice[:index], slice[index+1:]...)fmt.Println("인덱스로 제거 후:", slice)// 출력: 인덱스로 제거 후: [1 2 4 5]append 함수를 사용하여 제거하려는 요소를 제외한 두 부분을 연결합니다. 슬라이스의 순서를 유지하면서 요소를 제거할 수 있습니다.2. Slice(슬라이스) 처음 또는 마지막 요소 제거slice := []int{1, 2, 3, 4, 5}// 첫 번째 요소 제거slice = slice[1:]fmt.Println.. 2024. 7. 31.
Golang Slice(슬라이스) : make, copy, append 개요슬라이스를 생성하고 조작하는 데 사용되는 세 가지 중요한 내장 함수인 make, copy, 그리고 append에 대해 살펴보겠습니다.1. make 함수`make` 함수는 타입, 길이, 용량 이렇게 세 가지 인수를 받습니다. 내장함수 주석은 다음과 같습니다.// The make built-in function allocates and initializes an object of type// slice, map, or chan (only). Like new, the first argument is a type, not a// value. Unlike new, make's return type is the same as the type of its// argument, not a pointer to it... 2024. 7. 31.