[Golang] Golang 기본 저장하기

코딩생활/Golang

[Golang] Golang 기본 저장하기

열렙생활 2021. 5. 19. 19:42
반응형
package main  
/*Go 언어는 패키지선언으로 시작되어야 한다.  
package main 은 프로그램 시작점이 있는 패키지다.  
*/
import "fmt"  
//fmt 패키지를 가져온다.

func main() {  
fmt.Println("Hello Go World")  
}  
// 프로그램은 main() 함수에서 시작해서 main() 함수에서 종료된다.

변수
변수란 값을 저장하는 메모리 상의 공간이다

  • 이름이 있다.
  • 변수명 규칙
    문자, _, 숫자를 사용해 지을 수 있지만 첫 글자는 반드시 문자나 _로 시작해야 한다.
    _를 제외한 다른 특수문자를 포함할 수 없다.
    변수명 권장사항
    변수명은 영문자를 제외한 다른 언어의 문자는 사용하지 않는다.
    변수명에 여러 단어가 이어지면 두 번째 단어부터는 대문자로 시작한다.
    변수명은 되도록 짧게 한다. 잠시 사용되는 로컬 변수는 한 글자를 권장
    밑줄 _은 일반적으로 사용하지 않는다.
  • 값이 있다.
    var a int = 3 
    // 변수 a값을 대입 연산자 =를 이용해 3으로 바꾸면 
    //a의 메모리 시작 주소부터 int 타입의 공간에 값 3을 복사한다. 
    var b int var c = 4 d := 5
  • 타입이 있다.
  • 숫자, 불리언, 문자열, 배열, 슬라이스, 구조체, 포인터, 함수 타입 ,인터페이스, 맵, 채널
    타입 변환 : Go 언어는 강 타입 언어이다.

fmt 패키지

  • 터미널에서 텍스트 출력
  • 타입별 텍스트 출력
  • 키보드로부터 입력 받기
package main
import "fmt"
func main() {  
var a int = 10  
var b int = 20  
var f float64 = 32799438743.8927
fmt.Print("a:", a, "b:", b)
fmt.Println("a:", a, "b:", b, "f:", f)
fmt.Printf("a: %d b: %d f:%f\n", a, b, f)
}

Scan() : 표준 입력에서 값을 받는다.

package main
import "fmt"
func main() {  
var a int  
var b int
n, err := fmt.Scan(&a, &b)
if err != nil {
    fmt.Println(n, err)
} else {
    fmt.Println(n, a, b)
}
}

Scanf() :표준 입력에서 서식 형태로 값을 입력 받는다.
Scanln() : 표준 입력에서 한 줄을 읽어서 값을 입력 받는다.
Scanln() 함수가 실패한 경우 표준 입력 스트림을 비워준다.

stdin := bufio.NewReader(os.Stdin)  
stdin.ReadString('\\n')

연산자

  • 산술 연산자 : 사칙, 비트 , 시프트
  • 비교 연산자
  • 논리 연산자
  • 대입 연산자
  • 연산자 우선선위

함수
함수: 특별한 목적의 작업을 수행하는 코드 묶음.

  • 함수 선언함수를 호출하며 입력한 값은 복사해 사용된다.
    인수가 매개변수에 복사되어 전달된다.
    매개변수와 함수 내에서 선언된 변수는 함수가 종료되면 변수 범위를 벗어나서 접근하지 못한다.
    func Add (a int , b int ) int { 
    // a 와 b를 더한 결과를 반환 한다. 
    return a + b 
    // 함수 정의 키워드, 함수명, 매개변수, 반환타입, 함수코드 블록 
    // 첫 글자가 대문자인 함수는 패키지 외부로 공개되는 함수. }
  • 멀티 반환
  • 재귀 함수
  • 자기 자신 함수를 다시 호출하는 것.

상수

  • 변하지 않는 값을 표한할 때 사용.
  • 불리언, 룬, 정수, 실수, 복소수, 문자열
    const ConstValue int = 10

if문

  • 기본 if 조건문
  • if .. else 조건문
  • 조건문 중첩
  • 논리 연산자 (&&, ||)
  • if 초기문if 조건문; 조건문 {문장}

switch문

  • 비교값과 같은 case에 해당하는 문장을 수행한다.
  • break는 사용하지 않음. , fallthrough 필요시 사용함.

for문

  • 코드 블록을 반복해서 실행할 때 사용.
  • Go 언어는 반복문으로 for문 만 지원.
  • for 초기문; 조건문; 후처리 { 코드 블록 }
  • continue 는 이후 코드 블록을 수행하지 않고 곧바로 후처리를 하고 조건문 검사
  • break 는 for문에서 곧바로 빠져 나옴.
package main
import (  
"bufio"  
"fmt"  
"os"  
)
func main() {  
stdin := bufio.NewReader(os.Stdin)
for {
    fmt.Println("입력하세요. ")
    var number int
    _, err := fmt.Scanln(&number)

    if err != nil {
        fmt.Println("숫자를 입력하세요 ")
        stdin.ReadString('\n')
        continue
    }
    fmt.Printf("입력하신 숫자는 %d입니다.\n ", number)
    if number%2 == 0 {
        break
    }
}
fmt.Println("for 문이 종료됐습니다.")
}

배열
배열은 타입이 같은 값 여러 개를 가지는 자료구조이다.

  • 배열 선언
    var 변수명 [요소 개수] 타입
var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2}
var s [5]int{1:10, 3:30}  
x := [...]int{10,20,30}
  • 배열값 접근
  • 배열 변수에 대괄호 [] 를 쓰고 그 사이에 접근하고자 하는 요소의 인덱스를 적는다.
  • 배열 순회
    package main import ( "bufio", "fmt", "os" ) 
    func main() { 
    var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2} 
    // for 반복문에서 range 키워드를 이용하면 배열 요소를 순회할 수 있다. 
    for i, v := range t { fmt.Println(i, v) } }

구조체
구조체는 여러 필드를 묶어서 사용하는 타입이다.
연관된 여러 데이터를 하나의 이름으로 묶을 수 있다.

  • 구조체 선언
    type 타입명 struct {
    필드명 타입
    }

포인터
포인터 정의: 메모리 주소를 값으로 갖는 타입.

포인터 사용법

//데이터 타입 앞에 *를 붙여서 선언한다.  
var p *int  
var a int  
p = &a  
*p = 100

포인터는

  1. 성능 문제 (항상 값을 복사하기 때문에 많은 메모리 공간을 사용, 큰 메모리 공간을 복사할 때 발생)
  2. 변경사항 적용 (다른 공간으로 복사,ex 함수호출)
    해결을 위해 사용한다.

구조체를 생성해 초기화 하는 방식

var p1 \*Data = &Data{}  
Var p2 = new(Data)

인스턴스 개념
메모리에 할당된 데이터의 실체를 말한다.

문자열

  • ` 로 묶으면 특수 문자가 동작하지 않는다.

패키지
패키지 정의

패키지는 코드를 묶는 가장 큰 단위.
Go 로 만든 모든 프로그램은 패키지들을 묶어서 만들게 된다.
패키지는 함수, 구조체, 상수를 외부로 노출시킬 수 있다.

외부 패키지 사용하기

Go 모듈 알아보기

  • Go 모듈은 Go 패키지들을 모아놓은 Go 프로젝트 단위.
  • Go 1.16버전부터 Go 모듈 사용이 기본이 되었다.
반응형

'코딩생활 > Golang' 카테고리의 다른 글

[Golang]Golang 기본 저장하기2  (0) 2021.05.25