포인터 11

Go) 포인터 자동 역참조

You said:// 구조체 포인터?package mainimport ( "fmt" _ "fmt")type Rectangle struct { Width int Height int}func main() { var rect1 *Rectangle rect1 = new(Rectangle) // new()로 메모리 할당 후 포인터를 반환 rect2:=new (Rectangle) // new()로 메모리 할당 후 포인터를 반환 rect1.Height = 10 rect2.Height = 20 // rect2는 포인터이므로, rect2.Height로 접근 가능 fmt.Println(rect1.Height) // Output: 10 fmt.Println(rect2.Height) // Output: 20 fmt.Prin..

Go) Unmarshal과 포인터

Q1.json.Unmarshal(ctx.PostBody(), &req) 이게 어떻게 진행되는지 알려줘   A1.좋아, 이 한 줄은 Go에서 JSON을 구조체로 파싱하는 핵심 라인이야.json.Unmarshal(...)이 어떤 식으로 동작하는지, 단계별로 완전 상세하게 설명해줄게! 🔍✅ 먼저 전체 코드 다시 보기json.Unmarshal(ctx.PostBody(), &req)json.Unmarshal(...) → Go 표준 라이브러리 encoding/json의 함수ctx.PostBody() → 클라이언트가 보낸 HTTP 요청 본문 (JSON 문자열, []byte 타입)&req → JSON을 여기에 파싱해서 채워줘! 라는 구조체의 주소 (포인터)🔁 동작 원리 단계별 설명1. ctx.PostBody()이건..

Go 포인터 공부 4 - 구조체 포인터로 접근하기

import "fmt"type Vertex struct { X int Y int}// 구조체 인스턴스 선언 방법var ( //① 일반적인 선언방식입니다. X가1, Y가 2로 초기화됩니다. v1 = Vertex{1, 2} //② X만 값을 지정해주고, Y는 int에 zero value로 설정됩니다. v2 = Vertex{X: 1} //③ X, Y모두 int에 zero value로 설정됩니다. v3 = Vertex{})func main() { fmt.Println("v1.X값:", v1.X) v1.X = 4 fmt.Println("v1.X = 4로 바꾼 v1.X값:", v1.X) //④ 구조체 포인터로도 구조체의 값을 바꿀 수 있습니다..

이중 포인터, 포인터 배열

Q1.고 포인터를 이용할 때에는 참조와 역참조를 한 번에 할 수는 없는거지? 예를 들어서, *cat = &dog 이런 꼴의 연산말이야   A1.아주 날카로운 질문이야!Go에서 포인터 개념을 정말 제대로 이해하고 있다는 증거야.✅ 질문 정리*cat = &dog이런 형태의 연산이 가능한지, 즉 역참조(*)와 참조(&)를 한 줄에 같이 사용할 수 있는지?🔍 답변❗ 결론: 가능은 하지만, 문맥에 따라 의미가 달라지고 일반적인 경우엔 잘 안 씀.🔧 문맥별로 예를 들어볼게1. 타입이 맞는 상황이라면 *cat = &dog는 유효한 코드일 수 있음.var dog int = 10var cat *(*int) = new(*int) // cat은 'int를 가리키는 포인터'를 가리키는 포인터*cat = &dog // 이건..

Go 메서드에서 포인터 변환

func multiplyApi(ctx *fasthttp.RequestCtx) { log.Printf("[INPUT] %s\n", ctx.PostBody()) req := request{} if err := json.Unmarshal(ctx.PostBody(), &req); err != nil { ctx.SetStatusCode(400) ctx.SetBodyString("Invalid Json format!!") return } ctx.SetBodyString(strconv.Itoa(req.A * req.B))} Q. 이 경우, ctx는 포인터 변수인 것으로 추정하는데, ctx.PostBody() 이렇게, 포인터 변수 안에 PostBody()값으로 접근이 가능한거야?   A.좋은 질문이야! Go의 포..

Go 포인터 3

너가 요청한 포인터 응용 예제들을 간단하고 핵심만 딱 짚는 예시들로 정리해줄게.총 3가지로 나눠서 설명할게:구조체 포인터배열 포인터함수 인자에 포인터 전달1️⃣ 구조체 포인터📌 개념구조체(예: type Person struct)의 주소를 포인터로 다루면해당 구조체 안의 값들을 직접 변경할 수 있음.✅ 예시type Person struct { name string age int}func main() { p := Person{name: "Alice", age: 25} ptr := &p // 구조체 포인터 ptr.age = 30 // 포인터를 통해 구조체 내부 값 변경 fmt.Println(p.age) // 출력: 30}🧠 ptr.age는 사실 (*ptr).age를 축약한..

Go 포인터 공부 2

Q.1. 어떤 변수명 앞에 &을 붙여서 해당 변수의 메모리 값을 해당 변수의 타입형을 다루는 포인터 변수에 새로 할당할 수 있어?2. 정수형 포인터의 메모리 주소를, 다른 정수형 포인터에 할당할 수 있어? A.좋은 질문이야! Go에서 포인터 관련해서 정확히 짚고 넘어가면, 너의 개념이 더 단단해질 거야. 두 질문 모두 아주 중요하고, 실무에서도 헷갈리기 쉬운 포인트들이라서 예제까지 같이 설명해줄게.✅ 1. &변수명을 통해 변수의 **메모리 주소를 포인터 변수에 할당할 수 있는가?`질문 요약: 변수 앞에 &를 붙이면 그 변수의 주소값이 나오는데,이걸 변수 타입에 맞는 포인터 변수에 넣어도 되는가?🔹 대답: YES!var num int = 42 // 일반 int 변수var p *int = &n..

Go 포인터 공부

Q.포인터의 참조는, 말 그대로 해당 메모리 주소 값을 보는 것이고, 포인터의 역참조는, 해당 메모리 주소에 있는 값을 보는거야? 포인터를 무언가 담을 그릇의 위치라고 했을때를 가정해서 비유로 설명해줘.A : 와우, 개념 정리가 정말 잘 되어가고 있어요!맞아요! 방금 말한 건 Go 뿐만 아니라 거의 모든 언어에서의 포인터 개념의 핵심이에요.🧠 용어 먼저 간단하게 정리!용어설명참조(reference)어떤 변수의 **메모리 주소(위치)**를 알아내는 것 → &변수명역참조(dereference)어떤 포인터가 가리키는 메모리 주소에 들어 있는 실제 값을 보는 것 → *포인터변수🍱 그릇 비유로 설명해볼게요생각해보자.우리에겐 **밥이 담긴 그릇(n)**이 있고,그 그릇이 책상 위 어딘가에 놓여 있어.n     ..

포인터가 쓰이는 이유?

오늘 공부한 내용에 따르면,  포인터가 쓰이는 이유는, 아직 선언하지 않은 변수/구조체/객체에 대해서  포인터를 이용하여 미리 접근할 수 있게 준비해둘수 있기 때문인건가요? -> 참조하기 위해서. 예를 들어서, 어떤 20바이트의 인스턴스를 파라미터로 넘기려고 하는데, 이걸 통으로 복사해서 넘기면 또 20바이트를 통으로 추가해서 사용해야 하는데, 이게 아쉬우니까 이걸 참조해서 사용할 수 있게 하려다보니 고안된 느낌.