19.10.10 00:33 작성
·
155
0
참조형 인 경우 메소드에 포인터 변수를 넘기지 않아도 원본을 바꿀수 있는걸로 배운거 같은데 구조체는 좀 틀린가요?
리시버 메소드가 아닌 일반 메소드의 파라메터로 포인터변수가 아닌 일반 구조체를 넘겨서 구조체 안의 멤버필드의 값을 변경해도 원본은 변경되지 않는거 같아서 질문 드립니다.
답변 1
0
2019. 10. 10. 09:44
네 기본적으로 mutable 형 입니다.(값 변경 가능)
아래 설명 추가로 가져왔습니다.
참조 url : http://golang.site/go/article/16-Go-%EA%B5%AC%EC%A1%B0%EC%B2%B4-struct
1
2
|
p := new(person) p.name = "Lee" // p가 포인터라도 . 을 사용한다 |
Go에서 struct는 기본적으로 mutable 개체로서 필드값이 변화할 경우 (별도로 새 개체를 만들지 않고) 해당 개체 메모리에서 직접 변경된다. 하지만, struct 개체를 다른 함수의 파라미터로 넘긴다면, Pass by Value에 따라 객체를 복사해서 전달하게 된다. 그래서 만약 Pass by Reference로 struct를 전달하고자 한다면, struct의 포인터를 전달해야 한다.