Golang
[Golang] 메소드
GenieLove!
2022. 3. 12. 01:56
728x90
반응형
1.선언
func (c Client) info() int {//c Client - 리시버, info() - 메소드명
return c.width
}
func (c *Client) info() int {//c Client - 리시버, c의 값을 바꿈
c.width = 10
}
2.별칭 리시버 타입
type IntTest int
func (i IntTest) add(num int) int {
return int(i) + num
}
func main() {
var i IntTest = 1
fmt.Println(i.add(10))
var num int = 20
fmt.Println(IntTest(num).add(3))
}
3.포인터 메소드 and 값 타입 메소드
(1)포인터 메소드 - 포인터 메소드를 호출하면 포인터가 가리키고 있던 메모리 주솟값 복사
(2)값 타입 메소드 - 메소드 호출 시 리시버 타입의 모든 값 복사
type Client struct {
Name string
ID string
}
//포인터 메소드
func (c *Client) SetName(name string) {
c.Name = name
}
//값 타입 메소드
func (c Client) SetNameByValue(name string) {
c.Name = name
}
//값 타입 메소드(변경된 값 리턴)
func (c Client) SetNameByValueReturn(name string) Client {
c.Name = name
return c
}
func main() {
var c Client
c.SetName("genie")//(*c).SetName()으로 호출해야되지만 Go언어에서 자동으로 c의 값으로 변환하여 호출
fmt.Println(c.Name)//genie
c.SetNameByValue("hi")
fmt.Println(c.Name)//genie - 값이 복사된 후 할당하지 않았기 때문에 c의 값 변경 X
c = c.SetNameByValueReturn("geniebabo")
fmt.Println(c.Name)//geniebabo
728x90
반응형