인프런 커뮤니티 질문&답변

kium님의 프로필 이미지

작성한 질문수

쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정

사용자 정의 타입

구조체가 참조형 인가요

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의 포인터를 전달해야 한다.

kium님의 프로필 이미지

작성한 질문수

질문하기