Go 30일: 포인터와 구조체
10488 단어 beginnersgodevjournal
학습 업데이트
이 게시물은 Golang 여행 30일 중 4일, 5일, 6일을 다룹니다. 때때로 삶이 방해가 되기 때문에 많은 것을 다룰 수 없었습니다. 내가 다룰 수 있었던 것은 꽤 중요했습니다. 응용 프로그램을 만들기 전에 필요한 마지막 단계였습니다.
다음은 Go의 포인터와 구조체에 대한 제 노트입니다.
포인터
Go 포인터를 사용하면 프로그램 내의 값에 대한 참조를 전달할 수 있습니다. 이에 대한 예는 다음과 같습니다.
package main
import "fmt"
// This is a regular function in Go
// It has a regular integer argument
func nonPointerFunc(val int) {
val = 0
}
// This function takes a pointer as an argument
// This is denoted by the *int, this means pval is a pointer to an integer value
func pointerFunc(pval *int) {
// The * infront of pval dereferences the pointer so that we can work with the
// value that the pointer references
*pval = 0
}
func main() {
// Initialize a value
x := 1
// Pass the value to nonPointerFunc
nonPointerFunc(x)
// After execution print the value of x and you will find it is 1
fmt.Println("Value after non pointer function: ", x)
// Pass a pointer to x into pointerFunc
// To get a pointer to a function use the syntax &value
// &x is the pointer for x
pointerFunc(&x)
// Print x after the execution and you will get a value of 0
fmt.Println("Value after pointer function:", x)
// To see the pointer itself you can print it out this way.
fmt.Println("Pointer ", &x)
}
포인터를 더 잘 이해하기 위해 나는 . 그녀는 포인터가 어떻게 작동하는지 설명하기 위해 Golang의 스택과 힙을 설명합니다. 다음은 내 이해를 바탕으로 얻은 테이크 아웃입니다.
구조체
구조체는 유형이 지정된 필드 모음입니다. Go는 구조체를 사용하여 데이터를 그룹화하여 레코드를 형성합니다.
구조체 만들기
type macbook struct {
model string
price int
}
// creating a variable with the struct
air = macbook{"M1 air 8gb", 1000}
pro = macbook{model: "M1 pro 32gb", price:2000}
// Fields that have been ommitted will be zero-valued
proMax = macbook{price: 3500}
// struct fields can be accessed with a dot
fmt.Println(pro.model)
// dots can also be used with a struct pointer, the pointer will be automatically
// dereferenced
// Note that structs are mutable so updating the pointer will also update the initial value
sp := &air
fmt.Println(sp.price)
더 관용적인 Go 생성자 함수를 작성하기 위해 새 구조체를 만드는 데 사용됩니다.
func newMacbook(model string, price int) *macbook {
m := macbook{model: model, price: price}
m.price = 1000
return &m
}
이 생성자 함수를 사용하기 위해 다음 코드 줄을 작성합니다.
mini = newMacbook("M1 mini 8gb", 700)
fmt.Println(mini)
행동 양식
Go는 구조체 유형에 대한 메소드를 허용합니다. 이러한 메서드는 다음과 같이 정의됩니다.
type rect struct {
width, height int
}
// golang methods can have pointer recivers
func (r *rect) area() int {
return r.width * r.height
}
// golang methods can have value recivers
func (r rect) perim() int {
return 2*r.width + 2*r.height
}
func main() {
r := rect{width: 20, height: 10}
// Go automatically handles conversion between values and pointers for method calls.
rp := &r
fmt.Prinln("area: ", rp.area())
}
메서드 호출 시 복사를 방지하기 위해 포인터 수신기 유형을 사용할 수 있습니다. 또한 메소드가 수신 구조체를 변경하도록 허용합니다.
다음은
나는 꽤 많은 기본 사항을 살펴 보았고 이제 실제로 무언가를 만들어서 배우고 싶습니다. 가장 먼저 할 일은 gophercises 웹사이트에서 하나를 실행하는 것입니다. 연습은 퀴즈 게임을 만드는 것입니다. 게임은 CSV에서 질문과 답변을 읽고 사용자가 터미널에서 답변할 수 있도록 합니다.
앞으로 며칠 동안 이 건물을 문서화할 것입니다.
Reference
이 문제에 관하여(Go 30일: 포인터와 구조체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kmukabe/30-days-of-go-pointers-and-structs-4fem텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)