Programming Language/go 24

Go 언어 프로그래밍 - 함수 고급편

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 가변 인수 함수 ...키워드 사용 하여 배열인자로 받아 올 수 있다. package main import ( "fmt" ) func sum(nums ...int) int { sum := 0 fmt.Printf("nums type : %T\n", nums) for _, v := range nums { sum += v } return sum } func main() { fmt.Println(sum(1, 2, 3, 4, 5)) fmt.Println(sum(10, 20)) fmt.Println(sum()) } //fmt.Println 함수를 참고해보자(아래) //빈 인터페이스(interface{})를 가변인자로 받는다. //이전 수업시간에 빈인터페..

Go 언어 프로그래밍 - 인터페이스

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 사실 인터페이스는 중간에 빠져서 내용을 다 이해하지 못했습니다. 그래서 다른 블로그/깃허브/검색 등을 참고하였습니다. 인터페이스(Interface) interface : 구조체(struct)가 필드의 집합체라면, interface는 메서드의 집합체이다. interface는 타입이 구현해야 하는 메서드 원형들을 정의한다. package main import ( "fmt" ) //type 정의 type Tire struct { price float64 location int stat bool } //1.인터페이스는 type문을 사용하여 정의한다 type Car interface { setTire() float64 } //2.인터페이스 구현 //..

Go 언어 프로그래밍 - 숫자맞추기 게임

목표 1. 0~99 사이 랜덤한 숫자 생성 2. 사용자 입력 3. 사용자 입력값이 크면 "큽니다" 작으면 "작습니다" 출력 2번 반복 4. 입력값이 같으면 프로그램 종료 랜덤 math/rand 패키지 사용rand.Seed(seed int64) 함수로 랜덤 시드(Seed) 설정rand.Intn(n int) int 함수로 0~(n-1) 사이의 값 생성 package main import ( "fmt" "math/rand" ) func main() { //seed 값에 의해 랜덤이 정해진다. //알수 없는 랜덤값이 나오려면 seed 값이 바뀌어야한다. //프로그램 실행시마다 계속 변화하는 값을 seed로 해야 진정한 랜덤 -> 대표적으로 시각 rand.Seed(100) for i := 0; i < 10; i+..

Go 언어 프로그래밍 - 문자열, 모듈과 패키지

문자열 문자의 집합 package main import "fmt" func main() { poet1 := "죽는날까지 하늘을 우러러\n 글을 작성중입니다.\n 매우 긴 글입니다.\n 반가워요" poet2 := `이걸로도 문자를 작성할 수 있어요. 쌍따음표는 한줄에 작성하지만 이 친구는 여러줄도 지원해요. 대신 이 친구는 특수문자로 행 변경같은거 \n 못해요` fmt.Println(poet1) fmt.Println(poet2) } UTF-8 문자코드 문자 1개에 1~4bytes를 갖는다. UTF-8은 첫 시작 비트를 확인하여 총길이를 알 수 있다. (0으로 시작하면 1, 1은 2...) 문자의 길이는 1~3bytes를 갖고 앞에 1byte는 길이 확인 비트 이다. 문자열 순회 []rune([]int32)..

Go 언어 프로그래밍 - 조건문과 반복문 (구조체, 포인터)

구조체(struncture) 구조체는 여러 필드를 묶어서 사용하는 타입을 말한다. (여러 변수를 묶어 둔 것으로 생각하면 된다.) 구조체 선언 타입은 다양하게 있다. 현재 나온 struct 는 구조체 타입이다. 이후 interface 등 다양한 타입을 알아볼 시간이 있을 것이다. 구조체를 한번에 출력하면 선언된 값이 중괄호({})에 묶여서 출력된다. type 타입명 struct { 필드명 타입 ... 필드명 타입 } type Student struct { Name stirng Class int No int Score float64 } var a Student //이렇게 구조체를 타입으로 사용할 수 있다. package main import "fmt" type House struct { Address st..

Go 언어 프로그래밍 - 메서드

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 메서드(Method) 타입에 속한 함수입니다. 함수는 타입에 독립적이나, 메서드는 타입에 종속되어있다. 메서드 선언 리시버는 모든 패키지 지역 타입이 가능하다.(구조체, 별칭 타입 등) //func (리시버) 메서드명 타입 {} func (r Rabbit) info() int { return r.width * r.height } package main import "fmt" type account struct { balance int } func withDrawFunc(a *account, amount int) { a.balance -= amount } func (a *account) withDrawMethod(amount int) { a...

Go 언어 프로그래밍 - 조건문과 반복문 (배열)

배열(Array) 배열은 같은 타입의 데이터들로 이루어진 타입이다. 컴퓨터에서 배열은 항상 0부터 시작한다. 배열은 자료구조(data structure) 중 하나이다. 자료구조는 데이터를 어떤 형태로 저장할지 나타내는 구조를 말한다. 배열은 연속된 메모리이다. 변수의 타입은 메모리의 크기를 나타낸다. 배열은 사이즈 * 변수 타입 메모리크기 만큼 메모리를 할당받는다. 이렇게 한번에 메모리를 할당받는 것을 chunk 라고한다. 알고리즘 기본기 다지기2.기초 데이터구조 (배열, 연결리스트) 배열 변수 선언 package main import "fmt" func main() { //배열 초기값 선언 var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2} //배..

Go 언어 프로그래밍 - 조건문과 반복문 (if문, switch문, for문)

조건문 조건에 따라 코드를 실행하는 문장 IF문 true/false를 정하여 조건이 true일 겨우 조건에서 실행하도록 작성하는 코드 아래 조건문의 구조와 예제로 살펴보자. if 조건문{ 문장 } else if 조건문 { 문장 } else { 문장 } package main import "fmt" func main() { tem := 33 if temp > 28 { fmt.Println("에어컨을 켠다") } else if temp

Go 언어 프로그래밍 - 함수와 상수

함수 수학 : 들어가는 변수의 값으로 정해져있는 수식에 대입하여 결과를 도출한다. 입력이 들어가면 결과가 나온다. 프로그래밍 : 수학과 의미론적으로는 동일하다. 함수형 언어(functional language)에서는 수학적 의미와 유사하다. 하지만 Go 언어는 함수형 언어가 아니다. Go에서 함수는 코드 블럭이다. 어떠한 기능을 담고 있는 블럭이다. 함수 정의 아래의 예제를 기반으로 함수를 정의하는 방법을 알아보자 func Add( a int, b int) int { return a + b } 함수 정의 키워드(func) : 중괄호({}) 안의 함수를 정의 하겠다는 키워드 함수명(Add) : Add라는 이름의 함수 명을 정의, 함수명은 사용자 임의로 변경이 가능하다. 정의된 함수명으로 외부에서사용하여 해..

Go 언어 프로그래밍 - 슬라이스(Slice)

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 슬라이스 Go 에서 제공하는 동적 배열 타입이다. 정적 타입 (static type) : Compile time, Build time 시전에 진행, 실행도중 절대 변하지 않는 값 동적 타입 (dynamic type) : Runtime, 프로그램 실행 중 진행, 실행도중 변할 수 있는 값 즉, 슬라이스는 프로그램 실행 중 사이즈가 변경될 수 있는 동적 배열이다. var slice []int //슬라이스 선언 slice := []int{} ex18.1 package main import "fmt" func main() { var slice []int //처음 초기화시, 슬라이스의 길이는 0이다. if len(slice) == 0 { fmt.Pr..