JD의 블로그

고랭(Golang) 기초(1) 본문

-프로그래밍 언어/Golang

고랭(Golang) 기초(1)

GDong 2020. 1. 19. 19:41

고랭(Golang)을 배워야지 배워야지 하다가, 이제 하나씩 정리해보려고 한다. 

 

패키지 (Package)

  • 모든 Go 프로그램은 패키지로 구성되어 있다.
  • 패키지 이름은 디렉토리 경로의 마지막 이름을 사용하는 것이 규칙이다.
  • path/filepath => package filepath 

익스포트(Exported names)

  • 패키지를 import하면 외부로 메서드나 변수 상수 등에 접근할 수 있다.
  • 대문자로 시작하면 패키지를 사용할 수 있는 장소에 접근할 수 있는 exported name이 된다.
    • 즉, 소문자로 입력하게 되면 에러가 난다. (ex math.Pi (O), math.pi (X) )
    • 에러 : cannot refer to undepxed name math.pi

함수(Function)

  • C, C++, Java 언어와 다르게 매개변수의 타입은 변수명 뒤에 명시한다.
    • 코드를 왼쪽에서 오른쪽으로 읽을 때 자연스럽게 읽기 위해서이다.
    • 예시 ) 아래 코드
func add(x int, y int) int {
	return x + y
}

 

  • 두 개 이상의 매개변수가 같은 타입일 때, 마지막 매개변수에만 타입을 명시하고 나머지는 생략할 수 있다.
func add(x, y int) int {
	return x + y
}

 

  • 하나의 함수는 여러 개의 결과를 반환할 수 있다. 
func swap(x, y string) (string, string) {
	return x + y
}

 

  • 반환 값에 이름을 부여하면 변수처럼 사용 가능하며, 반환 값을 지정하지 않은 return 문장은 현재 결과 값을 알아서 반환합니다.
func split(sum int) (x, y int) {
	x = sum * 4 / 9
    y = sum - x
    return
}

func main() {
	fmt.Println(split(17))
}

result : 7 10

 

변수(Variables)

  • 변수 선언을 위해 var를 사용합니다. 
  • 타입은 문장 끝에 명시합니다.
var x, y, z int
var c, python, java bool
  • 변수 선언과 초기화를 각각 할 수 있다.
  • 초기화를 하는 경우 타입을 생략할 수 있다. 변수의 타입은 초기화 하고자 하는 값에 따라 결정된다.
var x, y, z int = 1, 2, 3
var c, python, java = true, false, "no!"

 

  • 변수의 짧은 선언 : 함수 내에서 := 을 사용하면 var과 명시적인 타입 지정을 생략할 수 있다. 
    • 함수 밖에서는 := 선언을 사용할 수 없다.
func main() {
	var x, y, z int = 1, 2, 3
    c, python, java := true, false, "no!"
    
}

 

상수(Constants)

  • 상수는 const 키워드와 함께 변수처럼 선언한다.
const Pi = 3.14

func main() {
	const World = "안녕"
    fmt.Println("Hello", World)
    fmt.Println("Happy", Pi, "Day")
    
    const Truth = true
    fmt.Println("Go rules?", Truth)
 }
 
 result : 
 Hello 안녕
 Happy 3.14 Day
 Go rules? true

 

반복문

  • Golang에는 반복문이 for 밖에 없다.
  • C와 Java와 유사하지만, 소괄호 ( )가 필요없다. 하지만 실행을 위한 중괄호 { } 는 필요하다.
func main() {
	sum := 0
    for i := 0; i < 10; i++ {
    	sum += i 
    }
    fmt.Println(sum)
}

 

  • 전, 후 처리를 제외하고 조건문만 표현할 수도 있다. (while을 사용하듯 for을 사용할 수 있다.)
func main() {
	sum := 1
    for sum < 1000 {
    	sum += sum
    }
    fmt.Println(sum)
}

 

조건문

  • 조건 표현을 위해 소괄호 ( ) 가 필요없다. 하지만 실행을 위한 중괄호 { } 는 필요하다.
func sqrt(x float64) string {
	if x < 0 {
    	return sqrt(-x) + "i"
    }
    return fmt.Sprint(math.Sqrt(x))
}

 

  • 조건문 앞에 짧은 문장을 실행할 수 있다. 짧은 실행문에서 선언된 변수는 if 안쪽 범위에서만 사용 가능하다. 
func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n): v < lim {
    	return v
    }
    return lim
}
  • if문 앞에서 짧게 선언된 변수는 else문 안에서도 사용할 수 있다.
func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n): v < lim {
    	return v
    } else {
    	fmt.Printf("%g >= %g\n", v, lim)
    }
    return lim
}

 

연습 : 함수와 루프 연습법

 

문제 : 제곱근 함수를 뉴턴의 방법으로 구현하라

 

뉴턴의 방법 : 초기값 z를 선택한 후에 z = z - (z * z - x) / (2*z) 를 이용하여 반복적으로 Sqrt(x) 함수의 근사값을 찾아가는 방법을 말한다.

 

solution:

더보기
package main

import {
	"fmt"
    "math"
)

func Sqrt(x float64) (float64, float64, int) {
	z, num := float64(6), 0 
    for z - math.Sqrt(x) > 0.001 {
    	z = z - (z*z - x) / (2*z)
        num += 1
    }
    return z, math.Sqrt(x), num
}

func main() {
	fmt.Println(Sqrt(2))
}

 

참고 자료 : A Tour of Go

'-프로그래밍 언어 > Golang' 카테고리의 다른 글

고랭(golang) 기초(2)  (0) 2020.01.21