In [ ]:
package main
import "fmt"
func main(){
fmt.Println("Hello World")
}
공백이란 무엇인가?
==> 줄바꿈, 빈 칸, 탭으로 공백 표현
주석이란 무엇인가? 주석을 작성하는 두 가지 방법은?
==> //로 시작하는 줄은 주석처리. ==> //와 / comment / 두가지 방법으로 처리.
앞에서 작성한 프로그램은 package main으로 시작한다. fmt 패키지 안에 포함된 파일은 무엇으로 시작하겠는가?
==> package fmt
앞에서는 fmt 패키지에 정의된 Println 함수를 사용했다. os 패키지에 포함된 Exit 함수를 사용하고 싶다면 어떻게 해야 하는가?
==> package os os.Exit()
uint8(byte) ==> 0 to 255
uint16 ==> 0 to 65535
uint32(rune) ==> 0 to 4294967295
uint64 ==> 0 to 18446744073709551615
int8 ==> -128 to 127
int16 ==> -32768 to 32767
int32 ==> -2147483648 to 2147483647
int64 ==> -9223372036854775808
to 9223372036854775807
장비에 의존적인 정수 타입 : uint, int uintptr
float32 ==> 32-bit floating-point numbers
float64 ==> 64-bit floating-point numbers
complex64 ==> float32 real and imaginary parts
complex128 ==> float64 real and imaginary parts
""으로 표현하거나 ``(역따음표)으로 표현
""으로 표현하게 되면 줄바꿈을 포함할 수 없고, 특별한 이스케이프 문자열 사용 가능(예: \n or \t)
fmt.Println("Hello World"[1]) ===> 출력결과 101 // 이유는 문자가 바이트로 표현되기 때문(e는 아스키코드로 101).
In [3]:
fmt.Println("Hello World"[1])
Out[3]:
정수는 컴퓨터에 어떻게 저장되는가?
==> 2진수로 저장.
우리는 (십진수 체계에서) 가장 큰 한 자리 숫자는 9이고, 가장 큰 두 자리 숫자는 99라는 사실을 알고 있다. 이진수에서 가장 큰 두 자리 숫자는 11(3)이고, 가장 큰 세 자리 숫자는 111(7)이며, 가장 큰 네 자리 숫자는 1111(15)라는 사실을 고려했을 때 가장 큰 8자리 숫자는 무엇인가? (힌트: 10¹-1 = 9이고 10²-1 = 99다)
==> 11111111(2) ==> 2^9-1 ==> 511
작업에 비해 조금 과도한 감이 있긴 하지만 Go를 계산기로도 쓸 수 있다. 321325 × 424521를 계산해서 그 결과를 터미널에 출력하는 프로그램을 작성하라. (곱셈을 위해 * 연산자를 사용한다)
==>
문자열이란 무엇인가? 문자열의 길이를 구하는 방법은 무엇인가?
==> ""또는 ``으로 표현된 것. len("hello world~?")
다음 수식의 값은 무엇인가? (true && false) || (false && true) || !(false && false)
==> false || false || true ==> true
var name string
변수는 var 키워드를 이용하여 만들어지고 그 다음으로 변수의 이름(name) 그리고 타입(string)으로 이루어져 있다.
helloworld := "Hello world!"
:= 형태로 축약이 가능하며, Go 컴파일러가 변수에 할당하는 값을 토대로 타입을 추론하기 때문에 타입 선언이 필요하지 않다.
go는 C언어와 동일하게 유효범위(Scope)를 갖기 때문에 블록에 포함된 범위까지만 유효하다.
go는 상수(constant)를 지원한다. 상수는 변수와 같은 방식으로 만들어지지만, var키워드 대신에 const 키워드를 사용한다.
In [1]:
a, b, c := 80, 100, 120
fmt.Println(a,b,c)
Out[1]:
In [1]:
var d, e, f string
d = "Hello"
e = "World"
f = "!"
fmt.Println(d+e+f)
Out[1]:
In [1]:
var (
g=10
h=12
i=0
)
fmt.Println(g, h, i)
Out[1]:
==> var name variableType name := value
다음 코드를 실행한 후 x의 값은 무엇인가? x := 5; x += 1
==> 6
유효범위란 무엇이고 Go에서는 변수의 유효범위를 어떻게 결정하는가?
==> 변수를 사용 할 수 있는 공간 // 블록으로 결정
var와 const의 차이점은 무엇인가?
==> var는 일반적인 변수 정의 할 때 사용 // const는 상수 정의 할 때 사용
예제 프로그램을 출발점으로 삼아 화씨를 섭씨로 변환하는 프로그램을 작성하라. (C = (F - 32) * 5/9))
==>
피트를 미터로 변환하는 프로그램을 하나 더 작성하라. (1 ft = 0.3048 m)
==>
In [1]:
a := 8
b := 20
for a < b {
a *= 2
fmt.Println(a)
}
Out[1]:
In [1]:
for i := 0; i < 10; i++ {
fmt.Println(i)
}
Out[1]:
In [2]:
names := []string{"홍길동", "이순신", "강감찬"}
for index, name := range names {
fmt.Println(index, name)
}
Out[2]:
In [ ]:
func iftest() int {
return 100;
}
y := 120
z := 70
if x := iftest(); x < y {
fmt.Println(x)
} else if x > z {
fmt.Println(z)
} else {
fmt.Println(x)
}
In [1]:
x := 100
max := 0
if x > max {
fmt.Println(x)
}
Out[1]:
In [1]:
swichCodition := 7
switch swichCodition {
case 0: fmt.Println("영")
case 1: fmt.Println("일")
case 2: fmt.Println("이")
case 3: fmt.Println("삼")
case 4: fmt.Println("사")
case 5: fmt.Println("오")
default: fmt.Println("알 수 없는 숫자")
}
Out[1]:
In [1]:
var array [10]int // declare
array[1] = 1004
primes := [6]int{2,3,5,7,11,13} // assign
x := [5]float64{
98,
93,
77,
82,
83,
}
fmt.Println(array[1])
fmt.Println(array)
fmt.Println(primes)
fmt.Println(x)
Out[1]:
In [1]:
var x []float64 //declare
x := make([]float64, 5) //declare
x := make([]float64, 5, 10) //declare
// make([]T, length, capacity)
new_x := new([10]float64)[0:5] //same
fmt.Println("x : ", x)
fmt.Println("x length : ", len(x))
fmt.Println("new_x : ", new_x)
fmt.Println("new_x length : ", len(new_x))
arr := []float64{1,2,3,4,5}
slice_arr1 := arr[0:3]
slice_arr2 := arr[0:]
slice_arr3 := arr[:5]
fmt.Println("slice_arr1 : ", slice_arr1)
fmt.Println("slice_arr2 : ", slice_arr2)
fmt.Println("slice_arr3 : ", slice_arr3)
// built-in function
// append(slice []Type, elems ...Type) []Type
// copy(dst, src []Type) int
// Copy returns the number of elements copied
slice_arr4 := append(slice_arr1, 10, 11)
slice_arr5 := make([]float64, 2)
copy(slice_arr5, slice_arr4)
fmt.Println("slice_arr4 : ", slice_arr4)
fmt.Println("slice_arr5 : ", slice_arr5)
Out[1]:
In [1]:
var x map[string]int //declare key:string , value:int
x := make(map[string]int) //initialize
x["age"] = 30
fmt.Println("x의 age는 : ", x["age"])
value, ok := x["name"] // 첫 반환값: 탐색결과 , 두번째 반환값: 탐색 성공여부
fmt.Println(value, ok)
elements := map[string]string{
"H": "Hydrogen",
"He": "Helium",
"Li": "Lithium",
"Be": "Beryllium",
"B": "Boron",
"C": "Carbon",
"N": "Nitrogen",
"O": "Oxygen",
"F": "Fluorine",
"Ne": "Neon",
}
for key, value := range elements {
fmt.Println("eleement : " + key + " , " + value)
}
Out[1]:
In [1]:
new_elements := map[string]map[string]string{
"H": map[string]string{
"name":"Hydrogen",
"state":"gas",
},
"He": map[string]string{
"name":"Helium",
"state":"gas",
},
"Li": map[string]string{
"name":"Lithium",
"state":"solid",
},
"Be": map[string]string{
"name":"Beryllium",
"state":"solid",
},
"B": map[string]string{
"name":"Boron",
"state":"solid",
},
"C": map[string]string{
"name":"Carbon",
"state":"solid",
},
"N": map[string]string{
"name":"Nitrogen",
"state":"gas",
},
"O": map[string]string{
"name":"Oxygen",
"state":"gas",
},
"F": map[string]string{
"name":"Fluorine",
"state":"gas",
},
"Ne": map[string]string{
"name":"Neon",
"state":"gas",
},
}
if el, ok := new_elements["Li"]; ok {
fmt.Println(el["name"], el["state"])
}
Out[1]:
In [ ]: