>백엔드 개발 >Golang >golang에서 값을 수정하는 방법

golang에서 값을 수정하는 방법

PHPz
PHPz원래의
2023-04-13 18:31:441009검색

Golang은 간단한 구문, 고성능 및 동시성 기능으로 인해 웹 애플리케이션, 네트워크 프로그래밍 및 기타 분야에서 널리 사용되는 매우 인기 있는 프로그래밍 언어입니다. Go에서는 변수의 값을 수정하는 것이 이해하기 쉽지 않을 수 있습니다. 이 글에서는 Go에서 값을 수정하는 방법을 자세히 소개합니다.

1. 값 전달 및 참조 전달

Golang에서는 함수 매개변수를 값 또는 참조로 전달할 수 있습니다. 값으로 전달한다는 것은 매개변수 값의 복사본을 함수에 보내는 것을 의미합니다. 함수 내에서 매개변수 값을 수정해도 함수 외부의 값에는 영향을 주지 않습니다. 참조로 전달한다는 것은 매개변수를 함수에 대한 포인터로 전달하는 것을 의미하며, 함수 내의 포인터에 대한 수정 사항은 함수 외부에 반영됩니다.

샘플 코드는 다음과 같습니다.

package main

import "fmt"

func main() {
    var x int = 10
    fmt.Println("before call:", x)
    modifyValue(x)
    fmt.Println("after call:", x)
    modifyPointer(&x)
    fmt.Println("after call:", x)
}

func modifyValue(x int) {
    x = x + 1
    fmt.Println("in func:", x)
}

func modifyPointer(x *int) {
    *x = *x + 1
    fmt.Println("in func:", *x)
}

이 코드는 modifyValuemodifyPointer 두 가지 함수를 정의합니다. 하나는 값을 수정하는 함수이고 다른 하나는 포인터를 수정하는 함수입니다. main 함수에서 정수 변수 x를 정의하고 이를 10으로 초기화한 다음 modifyValuemodifyPointer를 호출합니다. 각각 >. modifyValuemodifyPointer,一个用于修改值,一个用于修改指针。在 main 函数中,我们定义一个整型变量 x 并初始化为 10,然后分别调用 modifyValuemodifyPointer

当我们执行此程序,输出结果如下:

before call: 10
in func: 11
after call: 10
in func: 11
after call: 11

观察输出可以发现,当调用 modifyValue 时,虽然函数内修改了参数的值,但是函数外的值并没有改变;当调用 modifyPointer 时,函数内将指针指向的值加了一,函数外的值也相应变成了 11。这就是值传递和引用传递的区别。

2. 如何在 Golang 中修改值

了解了值传递和引用传递的区别,我们就可以开始介绍如何在 Golang 中修改值了。

2.1 数组和切片

在 Golang 中,可以通过索引来访问数组和切片中的元素,并且可以通过索引来修改元素的值。

示例代码如下:

package main

import "fmt"

func main() {
    var arr [3]int = [3]int{1, 2, 3}
    fmt.Println("before modify:", arr)
    arr[1] = 4
    fmt.Println("after modify:", arr)
    
    var slc []int = []int {1, 2, 3}
    fmt.Println("before modify:", slc)
    slc[1] = 4
    fmt.Println("after modify:", slc)
}

这段代码定义了一个长度为 3 的整型数组 arr 和一个整型切片 slc,然后依次对数组和切片中的第二个元素进行修改。

当我们执行此程序,输出结果如下:

before modify: [1 2 3]
after modify: [1 4 3]
before modify: [1 2 3]
after modify: [1 4 3]

2.2 Map

在 Golang 中,Map 是一种键值对结构,可以通过键名对 Map 中的值进行访问和修改。

示例代码如下:

package main

import "fmt"

func main() {
    var m map[string]int = map[string]int{"apple": 1, "banana": 2, "orange": 3}
    fmt.Println("before modify:", m)
    m["banana"] = 4
    fmt.Println("after modify:", m)
}

这段代码定义了一个字符串到整型的 Map,然后通过键名修改 Map 中的值。

当我们执行此程序,输出结果如下:

before modify: map[apple:1 banana:2 orange:3]
after modify: map[apple:1 banana:4 orange:3]

2.3 Struct

在 Golang 中,结构体是一种用户自定义的复合类型,可以定义结构体成员并通过点语法来访问和修改结构体成员的值。

示例代码如下:

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func main() {
    var p Person = Person{"Tom", 20}
    fmt.Println("before modify:", p)
    p.Age = 21
    fmt.Println("after modify:", p)
}

这段代码定义了一个名为 Person 的结构体类型,其中包含一个字符串类型的成员 Name 和一个整型类型的成员 Age,然后定义了一个名为 p

이 프로그램을 실행하면 출력 결과는 다음과 같습니다.

before modify: {Tom 20}
after modify: {Tom 21}
출력을 관찰하면 modifyValue를 호출하면 함수 내에서 매개 변수의 값이 수정되지만, 함수 외부의 값은 변하지 않습니다. modifyPointer가 호출되면 포인터가 가리키는 값은 함수 내에서 1씩 증가하고 그에 따라 함수 외부의 값도 11이 됩니다. 이것이 값으로 전달하는 것과 참조로 전달하는 것의 차이점입니다.

2. Golang에서 값을 수정하는 방법

값 전달과 참조 전달의 차이점을 이해하면 Golang에서 값을 수정하는 방법을 소개할 수 있습니다. 🎜

2.1 배열과 슬라이스

🎜Golang에서는 배열과 슬라이스에 포함된 요소는 인덱스를 통해 접근할 수 있고, 요소의 값은 인덱스를 통해 수정할 수 있습니다. 🎜🎜샘플 코드는 다음과 같습니다. 🎜rrreee🎜이 코드는 길이가 3인 정수 배열 arr과 정수 슬라이스 slc를 정의한 다음 배열을 정렬하고 순서대로 슬라이스 의 두 번째 요소를 수정합니다. 🎜🎜이 프로그램을 실행하면 출력은 다음과 같습니다. 🎜rrreee

2.2 Map

🎜Golang에서 Map은 키-값 쌍 구조이며 Map에 있는 값에 액세스하여 키 이름을 통해 수정되었습니다. 🎜🎜샘플 코드는 다음과 같습니다. 🎜rrreee🎜이 코드는 Map을 문자열에서 정수로 정의한 후 키 이름을 통해 Map의 값을 수정합니다. 🎜🎜이 프로그램을 실행하면 출력은 다음과 같습니다. 🎜rrreee

2.3 Struct

🎜Golang에서 구조는 사용자 정의 복합 유형이며 구조 멤버는 도트 구문을 통해 정의할 수 있습니다. 구조 멤버의 값에 액세스하고 수정합니다. 🎜🎜샘플 코드는 다음과 같습니다. 🎜rrreee🎜이 코드는 문자열 유형 멤버 Name과 정수 유형 멤버 를 포함하는 <code>Person이라는 구조 유형을 정의합니다. Age는 p라는 구조 변수를 정의하고 초기 값을 할당한 다음 마지막으로 구조 멤버의 값을 수정합니다. 🎜🎜이 프로그램을 실행하면 다음과 같이 출력됩니다. 🎜rrreee🎜3. 요약🎜🎜Golang의 변수는 기본 유형과 복합 유형으로 나눌 수 있습니다. 기본 유형은 직접 수정할 수 없지만, 복합 유형의 값은 인덱스, 키 이름, 도트 구문을 통해 수정할 수 있습니다. Golang에서 매개변수 전달은 값 전달과 참조 전달이라는 두 가지 방법으로 수행할 수 있습니다. 실제 필요에 따라 어떤 방법을 사용할지 결정해야 합니다. 값 전송의 경우 함수 외부의 값을 직접 수정할 수 없으며 포인터를 전달하여 수행해야 합니다. 🎜

위 내용은 golang에서 값을 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.