아래사이트에서 golang 실습 진행
https://go-tour-ko.appspot.com/basics/1
Go를 향한 여행
go-tour-ko.appspot.com
목록별로 정리
- Intro(패키지 & Import, Export)
- 함수
- 변수
- 기본 자료형
- Type 변환
- Inference type
- 상수
Intro
기본적으로 Golang은 패키지로 구성되어 있음. 표준 패키지는 여기서 참조
프로그램은 main 패키지에서 실행
import 경로를 통해서 “math/rand“ “fmt“패키지 사용
(import 안하고 코드를 저장하더라도 자연스럽게 import 생성)
package main
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
// My favorite number is 1
Go에서 대문자로 시작하는 이름이 export 아래와 같이 pi라고 하면 error
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.pi)
}
// ./prog.go:9:14: cannot refer to unexported name math.pi
// Go build failed.
Pi로 실행
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi)
}
// 3.141592653589793
// Program exited
함수 형식 & 여러개의 결과 반환
두 개 이상 연속된 이름 주어진 매개변수 같은 경우 마지막 변수 제외한 다른 변수들의 type을 생략할 수 있다.
package main
import "fmt"
func add(x, y int) int {
return x + y
}
func main() {
fmt.Println(add(22, 33))
}
// 55
한 함수는 몇 개의 결과든 여러개 결과 반환 가능
package main
import "fmt"
func swap(x, y, z string) (string, string, string) {
return z, y, x
}
func main() {
a, b, c := swap("hello", "world", "wow")
fmt.Println(a, b, c)
}
// wow world hello
이름이 주어진 반환 값
가독성을 위해서 짧은 함수에서만 사용되어지는 것을 지향
package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 5 / 10
y = sum + x
return
}
func main() {
fmt.Println(split(25))
}
// 12 37
변수
var문은 변수에 대한 목록을 선언. var 문은 package나 함수 단에 존재할 수 있다.
package main
import "fmt"
var c, python, java bool
func main() {
var i int
fmt.Println(i, c, python, java)
}
// Program exited.
변수 초기화 & :=
변수 선언은 변수 하나당 한 개의 초깃값을 포함
package main
import "fmt"
var i, j int = 1, 2
func main() {
var c, python, java = true, false, "no!"
fmt.Println(i, j, c, python, java)
}
// 1 2 true false no!
:=라는 짧은 변수 선언은 함수 내에서 var 선언처럼 사용되어 질 수 있다.
함수 밖에서는 var func등의 키워드로 시작해서 := 구문은 사용할 수 없음.
package main
import "fmt"
func main() {
var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
// 1 2 3 true false no!
기본 자료형 & Zero values
Go의 기본 type
int와 uintptr type은 보통 32 bit, 64 bit의 길이를 가진다.
정수 값이 필요할 때에는 특정한 이유로 크기를 정해야하거나,
unsigned 정수 type을 사용하는게 아니면 int를 사용
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8의 별칭
rune // int32의 별칭
// 유니코드에서 code point를 의미.
float32 float64
complex64 complex128
Zero values(초깃값 없이 선언된 변수)
- 숫자 type에는 0
- boolean type에는 false
- string에는 ““ (빈 문자열)
Type 변환
T(v)는 v 라는 값을 T type으로 변환시켜준다.
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
좀 더 간단히 하면 아래와 같다.
i := 42
f := float64(i)
u := uint(f)
그리고 Go는 다른 type의 요소들 간의 할당에 명시적인 변환이 필요하다.
아래에서 float64나 uint 변환 제거해보면 에러가 뜬다.
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z uint = uint(f)
fmt.Println(x, y, z)
}
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt((x*x + y*y))
var z uint = (f)
fmt.Println(x, y, z)
}
// ./prog.go:10:33: cannot use x * x + y * y (type int) as type float64 in argument to math.Sqrt
./prog.go:11:6: cannot use f (type float64) as type uint in assignment
Go build failed.
Inference type
:= 혹은 var = 표현을 이용해서 변수지정. 그 변수 type은 오른 편에 있는 값으로부터 유추됨
var i int
j := i // j 는 int
i := 42 // int
f := 3.142 // float64
g := 0.867 + 0.5i // complex128
package main
import "fmt"
func main() {
v := 42 // change me!
fmt.Printf("v is of type %T\n", v)
}
// v is of type int
상수
상수는 const로 사용, 변수처럼 선언된다. character 혹은 string, boolean, 숫자 값이 될 수 있다.
:= 를 통해서 선언될 수는 없다.
package main
import "fmt"
const Pi = 3.14
func main() {
const World = "世界"
fmt.Println("Hello", World)
fmt.Println("Happy", Pi, "Day")
const Truth = true
fmt.Println("Go rules?", Truth)
}
// Hello 世界
// Happy 3.14 Day
// Go rules? true
비트 연산자 시프트 연산자
(velog & tistroy 참고)
package main
import "fmt"
func main() {
var a int8 = 5 // 변수 a를 int8, 8비트 정수로 선언, 5(으)로 초기화.
var b int8 = 3 // 변수 b를 int8, 8비트 정수로 선언, 3(으)로 초기화.
fmt.Printf("%08b\n", a << b) // a << b 연산을 한 결과를 출력합니다.
} // 00101000
- 왼쪽 시프트 <<
- 5의 비트 자릿수를 0 1 2 3 만큼, 즉 3만큼 왼쪽으로 옮기는 연산
- 오른쪽 시프트 >>
- 5의 비트 자릿수를 0 1 2 3 만큼, 즉 3만큼 오른쪽으로 옮기는 연산
package main
import "fmt"
func main() {
var a int8 = 5 // 변수 a를 int8, 8비트 정수로 선언 5(으)로 초기화.
var b int8 = 3 // 변수 b를 int8, 8비트 정수로 선언 3(으)로 초기화.
fmt.Printf("%08b\n", a >> b) // a >> b 연산을 한 결과를 출력합니다.
} // 00000000
'MadApp' 카테고리의 다른 글
OJT 2022-03-04 (0) | 2022.03.13 |
---|---|
OJT 2022-02-21 (0) | 2022.03.13 |
OJT 2021-12-29 (0) | 2022.03.13 |
Share(PAN-59 UI 로그인 로고 변경) OJT 2021-12-08 권재현 (0) | 2022.03.13 |
OJT 2021-12-07 KJH SSH (Secure Shell) (0) | 2022.03.13 |