내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이전 글에서 if와 for를 소개했는데, 연습하면 안 됩니다.continue
100 이내의 짝수의 합을 계산하는 명령문입니다. 우리가 코드를 작성하면서,continue
명령문은 필요하지 않은 특정 반복을 건너뛰는 데 도움이 됩니다. 예를 들어 이 예에서는 모든 홀수를 건너뜁니다.
- sum := 0
- for i := 1; i < 100; i++{
- if i & 1 == 0 {
- continue
- }
- sum += i
- }
-
- fmt.Println("the sum is",sum)
프로그래밍에서 우리는 동일한 유형의 요소 집합을 처리해야 하는 경우가 많으며 이러한 요소 집합은 Go 언어의 특정 데이터 구조로 표현됩니다. 오늘은 Go의 여러 컬렉션 유형인 배열, 슬라이스, 맵을 자세히 소개하겠습니다.
먼저 배열부터 시작해 보겠습니다. 배열은 Go에서 가장 기본적인 데이터 구조입니다. 동일한 유형의 요소를 고정 길이로 배열한 것입니다. 배열이 선언되면 길이를 변경할 수 없습니다. 배열의 선언과 초기화는 매우 간단합니다.
배열을 선언할 때 배열 유형과 배열 길이를 지정해야 합니다. 배열을 선언하는 방법은 다음과 같습니다.
var arrayName [arrayLength]elementType
예를 들어, 길이가 5인 정수 배열을 선언합니다.
var numbers [5]int
다양한 방법으로 배열을 초기화할 수 있습니다.
var numbers = [5]int{1, 2, 3, 4, 5}
:=
짧은 설명:numbers := [5]int{1, 2, 3, 4, 5}
numbers := [...]int{1, 2, 3, 4, 5}
numbers := [5]int{0: 1, 4: 5}
0부터 시작하는 인덱스로 배열의 요소에 액세스할 수 있습니다.
value := numbers[2] // 获取索引为 2 的元素
당신이 사용할 수있는for
배열의 모든 요소를 반복합니다.
- for i, value := range numbers {
- fmt.Printf("Index: %d, Value: %dn", i, value)
- }
내장된 것을 사용할 수 있습니다.len
배열의 길이를 가져오는 함수:
length := len(numbers)
배열이 명시적으로 초기화되지 않으면 해당 요소는 자동으로 해당 유형의 0 값으로 설정됩니다. 예를 들어 정수 배열의 0 값은 0입니다.
var numbers [5]int // 所有元素都是 0
Go 언어는 다차원 배열도 지원합니다. 다음은 2x3 정수 배열을 선언하고 초기화하는 예입니다.
- var matrix [2][3]int
- matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}
배열의 길이는 고정되어 있으므로 어떤 경우에는 그다지 유연하지 않을 수 있습니다. 가변 길이 컬렉션이 필요한 경우 슬라이스를 사용할 수 있습니다.
다음은 동적 배열로 생각할 수 있는 보다 유연한 내장 유형인 슬라이스입니다. 슬라이스의 길이는 가변적이며 배열 기반으로 생성되어 더욱 편리합니다. 슬라이스를 선언하고 초기화하는 방법은 다음과 같습니다.
- s := make([]int, 3) // 创建一个长度为3的整型切片
- s[0] = 1 // 切片元素赋值
- s[1] = 2
- s[2] = 3
- s = append(s, 4) // 向切片追加元素
Go 언어에서는 배열과 슬라이스가 모두 동일한 유형의 일련의 요소를 저장하는 데 사용되지만 메모리 할당, 크기 가변성 및 사용법에서는 상당한 차이가 있습니다. 배열과 슬라이스의 주요 차이점은 다음과 같습니다.
[3]int
그리고[4]int
종류가 다릅니다.[]int
모든 정수 슬라이스에 대한 공통 유형입니다.make
초기화할 배열의 함수 또는 슬라이스, 크기가 지정되지 않았습니다.다음은 배열 및 슬라이스 초기화의 예입니다.
- // 数组
- var arr [3]int = [3]int{1, 2, 3}
-
- // 切片
- var slice []int = []int{1, 2, 3}
- // 或者使用 make 函数
- slice := make([]int, 3)
append
함수는 요소를 추가하거나 슬라이싱 작업을 통해 하위 슬라이스를 얻습니다.슬라이스의 기본 배열은 힙에 할당될 수 있으며 슬라이스 요소에 액세스하는 시간 복잡도도 O(1)입니다.append
일반적으로 O(n) 작업인 기본 배열의 재할당이 발생할 수 있습니다.마지막으로 매핑을 살펴보겠습니다. 맵은 키를 값에 매핑하는 Go의 연관 배열입니다. 맵의 키는 정수, 부동 소수점 숫자, 문자열, 포인터, 인터페이스(인터페이스 내에 포함된 값이 비교할 수 있는 한), 구조체, 배열 등 항등 연산자가 지원하는 모든 유형이 될 수 있습니다. 매핑된 값은 모든 유형이 될 수 있습니다.
맵을 선언하는 구문은 다음과 같습니다.
var mapName map[keyType]valueType
예를 들어, 키를 문자열로, 값을 정수로 사용하여 맵을 선언합니다.
var scores map[string]int
지도를 선언한 후 통과해야 합니다.make
사용할 수 있도록 초기화하는 함수:
scores = make(map[string]int)
또는 짧은 선언을 사용하여 초기화할 수 있습니다.
scores := make(map[string]int)
선언 시 초기화를 위해 리터럴을 사용할 수도 있습니다.
- scores := map[string]int{
- "alice": 90,
- "bob": 85,
- "charlie": 88,
- }
scores["alice"] = 90
value := scores["alice"]
키가 존재하지 않으면 해당 값 유형에 대해 0 값이 반환됩니다.
쉼표 -ok 관용구를 사용하여 키가 맵에 존재하는지 확인할 수 있습니다.
- value, exists := scores["alice"]
- if exists {
- // 键存在
- } else {
- // 键不存在
- }
사용delete
함수는 맵에서 키-값 쌍을 제거할 수 있습니다.
delete(scores, "alice")
키가 존재하지 않는 경우,delete
이 함수는 아무 작업도 수행하지 않습니다.
사용for
루프는 맵의 모든 키-값 쌍을 순회할 수 있습니다.
- for key, value := range scores {
- fmt.Printf("%s: %dn", key, value)
- }
지도의 0 값은 다음과 같습니다.nil
.하나nil
지도에는 기본 데이터 구조가 없으며 요소를 추가할 수 없습니다.지도에 요소를 추가하기 전에 다음을 사용해야 합니다.make
초기화하세요.
내장된 것을 사용할 수 있습니다.len
맵의 키-값 쌍 수를 가져오는 함수:
length := len(scores)
맵의 키는 정수, 부동 소수점 숫자, 문자열, 포인터, 인터페이스(인터페이스 내에 포함된 값이 비교 가능한 한), 구조, 배열 등과 같은 비교 가능한 유형일 수 있습니다. 슬라이스, 맵 및 함수는 동등 비교를 지원하지 않으므로 맵 키로 사용할 수 없습니다.
Go 언어에서 배열, 슬라이스 및 맵은 일반적으로 사용되는 세 가지 데이터 구조이며 각각 서로 다른 특성과 고려 사항을 가지고 있습니다. 사용할 때 주의할 사항은 다음과 같습니다.
nil
, 사용하기 전에 초기화가 필요합니다.nil
,nil
맵은 키-값 쌍을 저장하는 데 사용할 수 없으며 사용하기 전에 초기화해야 합니다.delete
존재하지 않는 키를 삭제해도 오류가 발생하지 않지만, 키가 있는지 확인하는 것이 안전합니다.