Golang 함수 배열 매개변수 적용 방법
Golang은 배우기 쉽고 효율적이며 안전하며 가비지 수집 기능을 갖춘 오픈 소스 프로그래밍 언어입니다. 배열은 Golang의 매우 기본적인 데이터 유형이며, 함수 매개변수로 프로그램을 작성하는 일반적인 방법이기도 합니다. 이 글에서는 독자들에게 Golang 함수 적용에 영감을 주기 위해 Golang에서 함수 매개변수로 배열을 적용하는 방법을 소개합니다.
배열을 함수의 값으로 전달하면 함수의 형식 매개변수는 실제 매개변수 값과 동일한 복사본을 가져오고 함수 내 형식 매개변수를 수정하면 실제 매개변수에는 영향을 미치지 않습니다. 이 방법은 함수의 배열에 대해 몇 가지 간단한 작업을 수행해야 하는 상황에 적합합니다.
예를 들어, 다음 코드는
package main import "fmt" func modifyArr(arr [3]int) { for i := 0; i < len(arr); i++ { arr[i] += i } } func main() { var arr [3]int = [3]int{1, 2, 3} fmt.Printf("Before modified, arr = %v ", arr) modifyArr(arr) fmt.Printf("After modified, arr = %v ", arr) }
출력 결과는 다음과 같습니다.
Before modified, arr = [1 2 3] After modified, arr = [1 2 3]
modifyArr 함수에서 배열을 수정하더라도 배열의 값이 변하지 않는 것을 알 수 있습니다. 배열은 주 함수에서 인쇄됩니다.
배열을 함수에 포인터로 사용하여 매개변수를 전달할 때 함수는 실제 매개변수 그룹을 직접 수정할 수 있으며, 이 방법은 함수에서 더 복잡한 작업을 수행해야 하는 상황에 적합합니다.
다음은 코드 예시입니다.
package main import "fmt" func modifyArrByPointer(arr *[3]int) { for i := 0; i < len(arr); i++ { arr[i] += i } } func main() { var arr [3]int = [3]int{1, 2, 3} fmt.Printf("Before modified, arr = %v ", arr) modifyArrByPointer(&arr) fmt.Printf("After modified, arr = %v ", arr) }
출력 결과는 다음과 같습니다.
Before modified, arr = [1 2 3] After modified, arr = [1 3 5]
보시다시피,modifyArrByPointer 함수에서는 포인터 연산을 통해 배열을 수정합니다.
배열을 함수의 슬라이스 매개변수로 전달하면 배열의 모든 슬라이싱 작업을 함수 내에서 사용할 수 있습니다. 이 방법의 장점은 전체 배열이 복사되지 않고 복사만 가능하다는 것입니다. 참조가 전달되었습니다. 이 방법은 어레이에서 작동하기 위해 슬라이싱이 필요한 시나리오에 적합합니다.
예를 들어 다음 코드는
package main import "fmt" func modifyArrBySlice(arr []int) { for i := 0; i < len(arr); i++ { arr[i] += i } } func main() { var arr [3]int = [3]int{1, 2, 3} fmt.Printf("Before modified, arr = %v ", arr) modifyArrBySlice(arr[:]) fmt.Printf("After modified, arr = %v ", arr) }
출력 결과는 다음과 같습니다.
Before modified, arr = [1 2 3] After modified, arr = [1 3 5]
보시다시피, ModifyArrBySlice 함수의 매개변수에서 arr[:]을 사용하여 배열의 슬라이스를 전달합니다. 이렇게 하면 배열을 슬라이싱 작업으로 수정할 수 있습니다.
Golang에서 구조체에는 배열 유형 필드도 포함될 수 있습니다. 함수에 구조를 전달할 때 배열에서 작동할 구조의 참조 또는 값을 전달하도록 선택할 수 있습니다.
예를 들어 다음 코드는
package main import "fmt" type ArrStruct struct { arr [3]int } func modifyArrByStruct(s ArrStruct) { for i := 0; i < len(s.arr); i++ { s.arr[i] += i } } func modifyArrByStructPointer(s *ArrStruct) { for i := 0; i < len(s.arr); i++ { s.arr[i] += i } } func main() { var s ArrStruct = ArrStruct{[3]int{1, 2, 3}} fmt.Printf("Before modified, arr = %v ", s.arr) modifyArrByStruct(s) fmt.Printf("After modified by value, arr = %v ", s.arr) modifyArrByStructPointer(&s) fmt.Printf("After modified by pointer, arr = %v ", s.arr) }
출력 결과는 다음과 같습니다.
Before modified, arr = [1 2 3] After modified by value, arr = [1 2 3] After modified by pointer, arr = [1 3 5]
구조체를 함수의 값으로 전달하면 함수가 멤버 변수의 값을 수정할 수는 없지만, 구조는 함수로 사용됩니다. 포인터를 통해 매개변수를 전달할 때 해당 멤버 변수를 수정할 수 있습니다.
요약:
Golang에는 배열을 함수의 매개변수로 사용하는 세 가지 방법이 있습니다: 값 전달, 포인터 전달, 슬라이스 전달. 값 전달은 간단한 작업 시나리오에 적합하고, 포인터 전달은 함수 내부의 복잡한 작업이 필요한 시나리오에 적합하며, 슬라이스 전달은 배열에 대한 슬라이싱 작업이 필요한 시나리오에 적합합니다. 또한 구조에서 배열이 구조의 멤버 변수인 경우 구조 포인터를 사용하여 수정을 위한 매개변수를 전달하도록 선택할 수 있습니다. 실제 애플리케이션에서 개발자는 특정 요구에 따라 적절한 매개변수 전달 방법을 선택해야 합니다.
위 내용은 Golang 함수의 배열 매개변수 적용 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!