반응형
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
포인터는
- 성능 문제 (항상 값을 복사하기 때문에 많은 메모리 공간을 사용, 큰 메모리 공간을 복사할 때 발생)
- 변경사항 적용 (다른 공간으로 복사,ex 함수호출)
해결을 위해 사용한다.
구조체를 생성해 초기화 하는 방식
var p1 \*Data = &Data{}
Var p2 = new(Data)
인스턴스 개념
메모리에 할당된 데이터의 실체를 말한다.
문자열
- ` 로 묶으면 특수 문자가 동작하지 않는다.
패키지
패키지 정의
패키지는 코드를 묶는 가장 큰 단위.
Go 로 만든 모든 프로그램은 패키지들을 묶어서 만들게 된다.
패키지는 함수, 구조체, 상수를 외부로 노출시킬 수 있다.
외부 패키지 사용하기
- 표준패키지:https://golang.org/pkg
- Awesome Gohttps://github.com/avelino/awesome-go
- 별칭
- 사용하지 않는 패키지 포함하기 _
Go 모듈 알아보기
- Go 모듈은 Go 패키지들을 모아놓은 Go 프로젝트 단위.
- Go 1.16버전부터 Go 모듈 사용이 기본이 되었다.
반응형
'코딩생활 > Golang' 카테고리의 다른 글
[Golang]Golang 기본 저장하기2 (0) | 2021.05.25 |
---|