language 29

Go 의 포인터

아주 오래전이지만 C 언어를 공부한 적이 있었다. Go 언어를 배워보기로 하기를 잘한것 같다. 처음 프로그래밍 언어를 배울 때 이런 얘기를 들었다. Java 는 Class 에서 (상속 등과 관련된), C 는 포인터에서 많이 포기를 한다고,, 그래서 포인터에 겁을 먹은적이 있었는데, 깊고 복잡한 내용이 아니면 포기할 정도는 아니라고 생각 했다. 아무튼, 포인터 관련된 연산자는 크게 두가지가 있다. 하나는 & 다른 하나는 * & 는 그 변수의 주소값을 확인할 때 사용하고, * 는 주소가 가리키는 값을 확인할 때 사용한다. 여기서 주소라고 하는 것은 메모리의 주소를 뜻한다. 다음 코드를 보자. package main import "fmt" func main() { a := 2 b := &a fmt.Printl..

Archive/Go 2021.05.17

Go 의 if 사용 방법

Go 에서 if 문은 다음과 같이 작성할 수 있다. package main import "fmt" func canIDrink(age int) bool { if age < 18 { return false } return true } func main() { fmt.Println(canIDrink(16)) } 소괄호 없이 그냥 조건을 쓴다는 부분을 빼고는 다른 언어들과 별로 다를게 없어 보인다. 하지만 Go 의 if 는 재밌는 문법이 하나 더 있다. if 블럭 안에 변수를 선언해서 사용할 수 있다. func canIDrinkVer2(age int) bool { if koreanAge := age + 2; koreanAge < 18 { return false } return true } 이렇게 쓰면 뭐가 좋을..

Archive/Go 2021.05.16

Go 의 for, range, ...args

Go 에서 반복문은 오직 for 를 사용해서만 가능하다. 어떻게 보면 다양한 형태의 for 문을 사용 했었는데 하나로 통일 된게 더 좋을수도 있겠다. 개수가 정해지지 않은 여러개의 정수를 전달받아 합을 반환하는 함수를 만들어 보자. package main import "fmt" func superAdd(numbers ...int) int { fmt.Println("without index") for number := range numbers { fmt.Print(number) } fmt.Println() fmt.Println() fmt.Println("with index") for index, number := range numbers { fmt.Println(index, number) } fmt.Pri..

Archive/Go 2021.05.16

Go 의 함수 part 2 (naked return, defer)

Go 의 함수에는 'naked return' 이라는 것이 있다. 이것의 의미는 return 키워드에 굳이 반환 할 변수를 명시하지 않아도 됨을 뜻한다. part 1 에서 길이와 영문 대문자 변환 결과를 반환하는 함수를 다시 작성해보자. package main import ( "fmt" "strings" ) func lenAndUpper(name string) (length int, uppercase string) { length = len(name) uppercase = strings.ToUpper(name) return } func main() { totalLength, upper := lenAndUpper("nimkoes") fmt.Println(totalLength, upper) } part 1 의..

Archive/Go 2021.05.16

Go 의 함수 part 1 (기본 사용법)

Go 에서 함수는 아주 쉽다. 'func' 키워드를 사용해서 선언한다. 두 수를 전달 받아 곱한 결과를 반환하는 'multiply' 를 작성해보자. package main import "fmt" func multiply(a, b) { return a * b } func main() { fmt.Println(multiply(2, 2)) } 그런데 위와 같이 작성하고 실행하면 많은 오류를 만나게 된다. 그 이유는 Go 도 Java 와 마찬가지로 함수를 선언할 때 전달받을 타입과 반환 타입을 정해줘야 한다. 그래서 다음과 같이 고쳐서 작성해야 한다. package main import "fmt" func multiply(a int, b int) int { return a * b } func main() { f..

Archive/Go 2021.05.16

Go 의 상수와 변수

Go 에서 상수는 'const' 키워드를 사용해서 선언할 수 있다. const name string = "nimkoes" 특이한게 있다면, 타입을 명시하지 않으면 'untyped' 라는게 붙고, 값을 토대로 추론한 타입도 같이 명시 되었다. 그리고 타입을 명시하면 'untyped' 가 사라진다. 또 다른게 있다면, 타입을 변수의 뒤에 명시한다. 지금까지는 보통 타입을 먼저 쓰고, 그 타입의 값을 담을 변수의 이름을 작성했는데 Go 에서는 그 순서가 반대다. 약간 "문자열 타입의 변수 name 입니다." 라고 하던게 "name 변수 입니다. 근데 이제 string 타입인" 이라고 하는 느낌이다. 변수 선언은 'const' 대신 'var' 을 쓴다. var nickname string = "nickname"..

Archive/Go 2021.05.16

Go 의 package 와 import

앞서 Hello World 문자열을 출력하는 코드를 Go로 작성해 보았다. package main import "fmt" func main() { fmt.Println("Hello World!") } fmt 를 직접 import 한 적이 없는데, IDE 에서 알아서 자동으로 추가해 주었다. fmt 는 Go 가 가지고 있는 패키지 중 하나로 formatting 을 위한 package 이다. import 관련해서 javascript 의 경우 function 을 export 해주고 싶은 경우 모듈을 export 하겠다고 명시해 주어야 한다. Go 에서는 function 을 export 해주고 싶다면 function 을 영문자 대문자로 시작하면 된다. 정말 그런지 확인해보기 위해 현재 프로젝트의 최상위에 'so..

Archive/Go 2021.05.16

Go 개발 환경 설정과 Hello World (using 'VS Code')

Go 를 설치하기 위해 다운로드 사이트에 접속 한다. 'Download Go' 버튼을 클릭한다. OS 별로 설치 파일이 다른데 현재 윈도우 플랫폼을 사용하고 있기 때문에 'Microsoft Windows' 를 클릭 했다. 페이지가 이동 하면서 자동으로 다운로드가 시작 되었다. 다운받은 msi 프로그램을 실행해서 Go를 설치 했다. 강의 에서는 C 루트 디렉토리 하위에 바로 'go' 라는 패키지(폴더)를 만들었는데 설치 프로그램의 기본 경로가 'Program Files' 여서 그냥 냅두기로 했다. 설치가 끝나면 아래와 같이 C:\Program Files\Go 경로 하위에 아래와 같은 것들이 새로 생긴것을 확인할 수 있다. 그리고 강의의 실습을 하기 위해 만들라고 한 폴더들을 만들었다. 강의 내용대로라면, ..

Archive/Go 2021.05.16