Golang의 메서드

Golang 의 메서드는  함수와 비슷하지만 가장 큰 차이점이 하나 있습니다. 수신자 인수가 있어서 수신자 의 속성에 액세스할 수 있다는 것 입니다 . 수신기는 구조체형이거나 비구조체형일 수 있지만, 둘 다 같은 패키지에 있어야 합니다. int 또는 string 과 같은 내장 유형을 포함하여 다른 패키지에 정의된 유형에 대한 메서드를 만드는 것은 불가능합니다 . 그렇지 않으면 컴파일러가 오류를 보고합니다.

Golang의 메서드

예를 들어:

package main

import "fmt"

// Định nghĩa một struct
type person struct {
    name string
    age  int
}

// Định nghĩa một phương thức với struct receiver
func (p person) display() {
    fmt.Println("Name:", p.name)
    fmt.Println("Age:", p.age)
}

func main() {
    // Tạo một phiên bản của struct
    a := person{name: "a", age: 25}
    
    // Gọi phương thức
    a.display()
}

결과:

Name: a
Age: 25

통사론

func(receiver_name Type)  method_name(parameter_list) (return_type) { 
// Code
}

수신자: 이 방법을 사용하여 접근할 수 있습니다.

구조체 유형의 수신기를 사용하는 메서드

Go에서는 수신자가 struct 유형인 메서드를 정의할 수 있습니다. 수신기는 메서드 내부에서 접근 가능합니다. 이전 예제에서는 구조체 유형의 수신기를 사용하여 이러한 접근 방식을 설명했습니다.

수신기가 있는 메서드는 구조체 유형이 아닙니다.

Go에서는 수신자 유형과 메서드 정의가 같은 패키지에 있는 한 메서드가 비구조체 수신자를 가질 수도 있습니다. 다른 패키지의 수신자 유형(예: int, string)으로 메서드를 정의할 수 없습니다.

예를 들어:

package main

import "fmt"

// Tạo một kiểu tùy biến dựa trên int
type number int

// Định nghĩa một phương thức với receiver không phải struct
func (n number) square() number {
    return n * n
}

func main() {
    a := number(4)
    b := a.square()

    fmt.Println("Square of", a, "is", b)
}

결과:

Square of 4 is 16

수신 포인터를 사용한 방법

Go에서는 메서드에 포인터 수신기가 있을 수 있습니다. 이를 통해 메서드에서 변경한 내용을 호출자에 반영할 수 있는데, 이는 값 수신기에서는 불가능합니다.

통사론:

func (p *Type) method_name(...Type) Type {    // Code}

예를 들어:

package main

import "fmt"

// Defining a struct
type person struct {
    name string
}

// Phương thức với receiver pointer để chỉnh sửa dữ liệu
func (p *person) changeName(newName string) {
    p.name = newName
}

func main() {
    a := person{name: "a"}
    
    fmt.Println("Before:", a.name)
    
    // Gọi phương thức này để thay đổi tên
    a.changeName("b")
    
    fmt.Println("After:", a.name)
}

결과:

Before: a
After: b

메서드는 포인터와 값을 모두 허용합니다.

함수와 달리 Go 메서드는 값 수신자와 포인터 수신자를 모두 받을 수 있습니다. 포인터나 값을 전달하면 메서드가 그에 맞게 처리합니다.

예를 들어:

package main
import "fmt"

type person struct {
    name string
}
// Phương thức với receiver pointer
func (p *person) updateName(newName string) {
    p.name = newName
}

// Phương thức với receiver value 
func (p person) showName() {
    fmt.Println("Name:", p.name)
}

func main() {
    a := person{name: "a"}
    
    // Gọi phương thức con trỏ cùng giá trị
    a.updateName("b")
    fmt.Println("After pointer method:", a.name)
    
    // Gọi phương thức giá trị với con trỏ
    (&a).showName()
}

결과:

After pointer method: b
Name: b

메서드와 함수의 차이점

방법
수신기를 포함합니다 수신기가 포함되어 있지 않습니다
이름은 같지만 유형이 다른 메서드를 정의하는 것이 가능합니다. 이름은 같지만 유형이 다른 함수는 허용되지 않습니다.
최상급으로 사용할 수 없습니다 상위 객체로 사용 가능
Sign up and earn $1000 a day ⋙

Leave a Comment

이제 Passkey로 전환할 때입니다. 피싱 방지 비밀번호 대안입니다!

이제 Passkey로 전환할 때입니다. 피싱 방지 비밀번호 대안입니다!

기존 비밀번호의 현대적 대안인 패스키를 사용하면 더 이상 비밀번호를 기억하거나 관리(비밀번호 관리자를 사용하거나 사용하지 않고도)하거나 재설정할 필요가 없습니다.

브라우저 백업 방법: 북마크, 확장 프로그램, 비밀번호 등

브라우저 백업 방법: 북마크, 확장 프로그램, 비밀번호 등

브라우저를 영구적으로 전환하든, 데이터 손실 가능성을 줄이려는 경우에도 주기적으로 브라우저를 백업해야 합니다.

왜 물소와 소는 충분한 영양소를 얻기 위해 풀만 먹어야 할까요?

왜 물소와 소는 충분한 영양소를 얻기 위해 풀만 먹어야 할까요?

소는 왜 풀을 먹고도 살이 찌고 영양가 있는 우유를 생산할까요? 초식동물이 뚱뚱한 이유를 알고 싶다면 아래 기사를 읽어보세요.

과민성 대장 증후군이 있는 사람들이 복용해서는 안 되는 보충제

과민성 대장 증후군이 있는 사람들이 복용해서는 안 되는 보충제

모든 보충제가 과민성 대장 증후군(IBS)에 유익한 것은 아니며, 어떤 보충제는 증상을 악화시킬 수도 있습니다.

그룹 채팅을 위한 6가지 iMessage 앱

그룹 채팅을 위한 6가지 iMessage 앱

그룹 채팅을 위해 설치할 수 있는 iMessage 앱이 많이 있으며, 이를 통해 그룹 구성원과의 대화 경험을 향상시킬 수 있습니다. 그룹 채팅을 위한 iMessage 앱 6개 목록은 다음과 같습니다.

CMOS 배터리 교체 방법

CMOS 배터리 교체 방법

컴퓨터의 시간 또는 날짜 설정이 손실되거나 CMOS 읽기 오류, CMOS 체크섬 오류 또는 CMOS 배터리 오류 메시지가 표시되는 경우 CMOS 배터리를 교체해야 합니다.

최신 슈퍼비스트 리더 코드 및 코드 입력 방법

최신 슈퍼비스트 리더 코드 및 코드 입력 방법

슈퍼 비스트 리더 코드는 플레이어가 슈퍼 트레이너가 되는 것을 지원하여 매력적인 보상을 얻는 데 도움이 됩니다. 최신 슈퍼비스트 리더 코드 목록과 코드 입력 방법은 아래와 같습니다.

다이킨 에어컨 타이머를 원하는 시간에 켜지고 꺼지도록 설정하는 방법

다이킨 에어컨 타이머를 원하는 시간에 켜지고 꺼지도록 설정하는 방법

다이킨 에어컨 타이머는 사용자가 집에 오기 전에 에어컨을 켜거나 잠자는 동안 에어컨을 끄기 위해 타이머를 설정하는 데 자주 사용하는 유용한 기능 중 하나입니다.

세탁기 타이머가 종종 틀리는 이유

세탁기 타이머가 종종 틀리는 이유

오늘날 대부분의 세탁기는 표시 시간과 실제 세탁 시간 차이가 10~20분입니다.

토시바 에어컨 리모컨 배터리 교체 방법

토시바 에어컨 리모컨 배터리 교체 방법

토시바 에어컨 리모컨 배터리를 교체하는 방법은? Toshiba 에어컨 리모컨 배터리를 교체하는 방법에 대해 알아보려면 아래 기사를 읽어보세요.

최신 Hero AFK: VNG Royal War 코드 요약

최신 Hero AFK: VNG Royal War 코드 요약

Hero AFK: VNG War 기프트 코드를 입력하면 다양한 귀중한 게임 내 아이템을 받을 수 있습니다. 지금 알아보세요

최신 미니 영웅 Dai Chien Tam Quoc 코드

최신 미니 영웅 Dai Chien Tam Quoc 코드

코드 미니 히어로즈 다이 치엔 탐 꾸옥은 플레이어에게 돈, 다이아몬드, 일반 경험치, 캐릭터 경험치, 체력, 백만 군인 명령서 등 다양한 매력적인 아이템을 제공합니다.

Google Gemini를 사용해야 하는 5가지 이유

Google Gemini를 사용해야 하는 5가지 이유

경쟁사만큼 널리 알려지지는 않았지만, 구글의 제미니 AI는 많은 장점을 가지고 있습니다. 제미니에 주목할 만한 다섯 가지 이유를 소개합니다.

AI 기술로 만든 3분짜리 영상, 일본 애니메이션 업계에 공포 불러일으켜

AI 기술로 만든 3분짜리 영상, 일본 애니메이션 업계에 공포 불러일으켜

넷플릭스는 최근 AI 기술을 이용해 만든 3분짜리 애니메이션 영화 '개와 소년'을 자사 YouTube 채널에 공개해 일본 시장을 공략했습니다.

PXE-E61 오류 수정 방법: 미디어 테스트 실패, 케이블 확인

PXE-E61 오류 수정 방법: 미디어 테스트 실패, 케이블 확인

PXE-E61 오류는 일부 마더보드에서 지원하는 PXE(Preboot eXecution Environment)와 관련이 있습니다. PXE는 로컬 하드 드라이브가 아닌 네트워크를 통해 부팅 가능한 운영 체제를 검색하여 로드할 수 있는 특수 부팅 모드입니다.