package main
import "fmt"
import "strconv"
//함수 선언 위치는 어느 곳이든 가능
func helloGolang() {
fmt.Println("ex1 : Hello Golang!")
}
/*
func helloGolang() //예외 발생(괄호 위치 컴파일 에러)
{
fmt.Println("Hello Golang!")
}
*/
func say_one(m string) {
fmt.Println("ex2 :", m)
}
func sum(x int, y int) int {
return x + y
}
func main() {
//함수
//선언 : func 키워드로 선언
//func 함수명(매개변수) (반환타입 or 반환 값 변수명) : 반환 값 존재
//func 함수명() (반환타입 or 반환 값 변수명) : 매개변수 없음, 반환 값 존재
//func 함수명(매개변수) : 매개변수 존재, 반환 값 없음
//타 언어와 달리 반환 값(return value) 여러 개 가능
//예제1
helloGolang()
//예제2
say_one("Hello World!")
//예제3
result := sum(5, 5)
fmt.Println("ex3 :", result)
fmt.Println("ex3 :", sum(10, 10))
fmt.Println("ex3 :", strconv.Itoa(sum(10, 10))) //int to string (strconv.Atoi(int) : string to int)
}
package main
import "fmt"
func sum(i int, f func(int, int)) {
f(i, 10) // add(1, 2)를 호출
}
func add(a, b int) {
fmt.Println("ex1 :", a+b)
}
func multi_value(i int) {
i = i * 10
}
func multi_reference(i *int) {
*i *= 10 // *i = *i * 10
}
func main() {
//함수(콜백) 및 참조 전달(call by reference) 및 값 전달(call by value)
//예제1 (콜백 호출)
sum(10, add) //함수 전달
//예제2
//call by value
a := 100
multi_value(a)
fmt.Println("ex2 :", a)
//예제3
//reference by value
b := 100
multi_reference(&b)
fmt.Println("ex3 :", b)
}
package main
import "fmt"
func multiply(x int, y int) (int, int) { //(x, y int)가능
return x * 10, y * 15
}
func arrayMultiply(a, b, c, d, e int) (int, int, int, int, int) {
return a * 1, b * 2, c * 3, d * 4, e * 5
}
func main() {
//다중 값 반환(return values)
//예제1
a, b := multiply(10, 5)
//c := multiply(5, 10) //예외 발생(리턴 값 개수 != 선언 변수 개수)
c, _ := multiply(10, 5)
_, d := multiply(5, 10)
fmt.Println("ex1 : ", a, b)
fmt.Println("ex1 : ", c)
fmt.Println("ex1 : ", d)
//예제2
x1, x2, x3, x4, x5 := arrayMultiply(1, 2, 3, 4, 5)
y1, _, y3, _, y5 := arrayMultiply(1, 2, 3, 4, 5)
fmt.Println("ex2 : ", x1, x2, x3, x4, x5)
fmt.Println("ex2 : ", y1, y3, y5)
}
package main
import "fmt"
func multiply(x int, y int) (r1 int, r2 int) {
r1 = x * 10
r2 = y * 20
return //리턴 변수 지정
}
func multiply2(x int, y int) (int, int) {
return x * 10, y * 20
}
func main() {
//다중 값 반환(return values)
//예제1
a, b := multiply(10, 5)
fmt.Println("ex1 : ", a, b)
//예제2
c, d := multiply2(10, 5)
fmt.Println("ex2 : ", c, d)
}