[Go] Go 언어 함수(func) & 메소드(Method) 정리
2021. 1. 18. 16:43ㆍProgramming Language/Go
반응형
■ Go 언어 함수
func는 여러 프로그래밍 언어(JavaScript, Python 등)에서 일반적으로 사용하는 함수형태와 유사하지만, Go 언어에서는 특별하게 다수의 리턴값을 가질 수 있으며, 또한 리턴할 변수를 미리 선정하고 리턴시킬 수 있다.
1) 한개의 값을 리턴하는 함수
예시) 자료형이 string인 한개의 값을 리턴하는 함수
func SingleReturn(name string) string {
return name
}
2) 다수의 값을 리턴하는 함수
예시) 자료형이 int, string인 다수의 값을 리턴하는 함수
func ManyReturn(name string) (int, string) {
return len(name), name
}
3) 변수를 지정해서 리턴하는 함수
예시) 자료형이 int, string인 변수를 지정하여 값을 리턴하는 함수
func FixReturn(name string) (lenName int, upperName string) {
lenName = len(name)
upperName = strings.ToUpper(name)
return
}
4) 다수의 값을 인자로 받는 함수
예시) 자료형이 string인 다수의 값을 인자로 받는 함수
func ManyArgument(names ...string) {
fmt.Println(names)
}
■ Go 언어 메소드
메소드는 리시버(receiver)에 접근하여 작업이 가능하다. 또한 메소드는 같은 패키지에 있는 리시버만을 선언할 수 있으며, 주로 리시버는 구조체(Struct) 이다. 쉽게 말해 함수에 리시버가 있으면 메소드이다.
1) 벨류 리시버(Value Receiver)로 필드 접근
* Value Receiver는 리시버에 해당하는 새로운 객체를 복제하기 때문에 실제 객체에는 영향이 없다.
예시) person 구조체의 모든 필드에 값을 삽입하고, 출력하시오.
type Person struct {
name string
age int
address string
}
func (p Person) searchPerson() {
fmt.Println(p.name, p.age, p.address)
}
func main() {
myInfo := Person{"hyunmin", 28, "서울시 용산구"}
myInfo.searchPerson()
}
// 출력결과 : hyunmin 28 서울시 용산구
2) 포인터 리시버(Pointer Receiver)로 필드 접근
* Pointer Receiver는 실제 객체에 접근하여 작업이 가능하다.(수정, 검색 등)
예시) person 구조체의 모든 필드에 값을 수정하고 출력하시오.
type Person struct {
name string
age int
address string
}
func (p *Person) searchPerson() {
fmt.Println(p.name, p.age, p.address)
}
func (p *Person) changePerson() {
p.name = "donghun"
p.age = 27
p.address = "서울시 강서구"
}
func main() {
myInfo := Person{"hyunmin", 28, "서울시 용산구"}
// 수정 전
myInfo.searchPerson()
// 수정 작업
myInfo.changePerson()
// 수정 후
myInfo.searchPerson()
}
// 출력 결과
// hyunmin 28 서울시 용산구
// donghun 27 서울시 강서구
반응형
'Programming Language > Go' 카테고리의 다른 글
[Go] Google Gmail SMTP 설정 방법 및 메일 전송 (5) | 2021.09.15 |
---|---|
[Go] get 명령어 정리 (0) | 2021.04.14 |
[Go] Go 언어 구조체(Struct) 정리 (0) | 2021.01.17 |
[Go] Go 언어 맵(Map) 정리 (0) | 2021.01.16 |
[Go] Go 언어 배열(array) & 슬라이스(slice) 정리 (0) | 2021.01.16 |