return(반환) 형식을 함수 생성시 지정한다.
// 대소문자 변경을 위한 모듈 불러오기
import (
"strings"
)
// 인자로 name을 받아, length와 uppercase를 반환하는 함수 만들기
func lenAndUpper(name string) (length int, uppercase string){
length = len(name)
uppercase = strings.ToUpper(name)
// 반환하는 변수를 이미 위에서 지정했기 때문에, 다시 지정할 필요가 없다!
return
}
defer를 함수내에 사용해, 콜백함수를 만들 수 있다.
// 사용할 모듈 불러오기
import (
"fmt"
"strings"
)
func lenAndUpper(name string) (length int, uppercase string){
// defer는 함수가 종료된 뒤에 실행 된다. (콜백)
defer fmt.Println("It's done!")
length = len(name)
uppercase = strings.ToUpper(name)
return
}
for를 사용해, 반복함수를 만들 수 있다. - range와 콜론(;)방식 사용
numbers := [1,2,3,4,5,6]
total := 0
// for는 index와 value를 반환한다
for _, number := range numbers {
total += number
}
fmt.Println(total)
// 1 ~ 6을 더해서 화면에 출력해준다.
numbers := [1,2,3,4,5,6]
total := 0
for i:=0; i < len(numbers); i++ {
total += number[i]
}
fmt.Println(total)
if로 조건문을 사용할 때, 조건문 전용 변수를 만들 수 있다.
// 조건문으로 성인인지, 아닌지 검증하기
age := 20
// usAge는 조건문 내부에서만 사용가능하다.
if usAge := age - 2; usAge < 18 {
fmt.Println("children")
}
fmt.Println("adult")
case로 조건문의 반복을 줄일 수 있다. - 전용 변수도 생성 가능
age := 20
switch usAge := age - 2; usAge {
case < 18:
return false
case == 18:
return true
case > 50:
return false
}
return true
usAge := 18
switch {
case usAge < 18:
return false
case usAge == 18:
return true
case usAge > 50:
return false
}
return true
포인터를 만들 수 있다! - low level programing
변수(a) 앞에 &를 붙이면, 변수의 메모리 주소(&a)를 반환하고,
다른 변수(b)에 메모리 주소(&a)를 저장하면, 포인터(b)를 만들 수 있다
포인터 변수(b) 앞에 *를 붙이면, 포인터 변수에 저장된 메모리 주소(&a)에 접근 할 수 있다!
- a에 저장된 데이터 수정 가능
// 포인터 사용하지 않는 기존 방식
a := 2
b := a
b := 5
fmt.Println(a, b)
/*
출력 결과 : 2 5
a메모리 공간 : 2
b메모리 공간 : 5
*/
// 포인터 사용하는 방식
a := 2
b := &a
*b := 5
fmt.Println(a, *b)
/*
출력 결과 : 5 5
a메모리 공간 : 5
b메모리 공간 : a메모리 주소
*/
* 포인트 사용시 장점
동일한 데이터를 저장할때, 데이터를 복사하여 저장하는 기존의 방식보다 메모리를 적게 사용한다.
Array를 만들기 ( 범위 지정하는 Array )
// 5칸짜리의 문자열 Array만들기 - 범위를 벗어나면 오류를 반환한다.
names := [5]string{"jinho", "nico", "anna"}
// Array에 새로운 요소 추가하기
names[3] = "woo"
fmt.Println(names)
// 출력결과 : [jinho noco anna woo ]
Slice만들기 ( 범위 지정안하는 Array )
// 범위 제한없는 문자열 Slice 만들기
names := []string{"jinho", "nico", "anna"}
// Slice에 새로운 요소 추가하기
names = append(names, "woo")
fmt.Println(names)
// 출력결과 : [jinho noco anna woo]
map으로 객체(object) 만들기 - 타입이 제한 적임
import (
"fmt"
)
func main(){
// map[key형식]value형식 형태로 정의한다.
// *주의 : {}로 초기화 해주지 않으면, 나중에 값을 저장할 수 없다.
jinho := map[string]string{"name":"jinho", "age":"26"}
// var jinho = make(map[string]string) 도 가능하다.
// for문으로 map형식의 데이터에서 key값과 value값 하나씩 가져오기
for key, value := range jinho{
fmt.Println(key, value)
}
}
struct로 객체만들기 - 타입이 자유로움
import (
"fmt"
)
// 새로운 person struct 만들기
type person struct{
name string
age int
favFood []string
}
func main(){
favFood := []string{"kimchi", "ramen"}
// struct 사용해서 person 데이터 만들기
jinho := person{name:"jinho", age:26, favFood:favFood}
fmt.Println(jinho)
}
객체의 특정 값 제거하기
// go 내부에 존재하는 delete 메서드를 사용하면, 간단히 객체 요소를 삭제할 수 있다.
// 과일을 저장하는 객체
fruits := map[string]string{"orange":"orange", "grape":"purple"}
// fruits 객체에서 "orange"값 제거
delete(fruits, "orange")
/*
결과 : fruits: {"grape":"purple"}
*/
반응형