패키지 기본⭐⭐⭐
package main
//선언 방법
import (
"fmt"
"os"
)
func main() {
var name string
fmt.Println("이름은?: ")
fmt.Scanf("%s", &name)
fmt.Fprintf(os.Stdout, "Hi! %s\n", name) //터미널에서 진행
// cd, go run .\package1.go
}
- 패키지 : 코드 구조화(모듈) 및 재사용
- 응집도, 결합도
- Go : 패키지 단위의 독립적이고 작은 단위로 개발 -> 작은 패키지를 결합해서 프로그램을 작성 할 것을 권고
- 패키지 이름 = 디렉토리 이름
- 같은 패키지 내 -> 소스파일들은 디렉토리명을 패키지 명으로 사용한다.
- 네이밍 규칙 : 소문자 private 패키지 외부 접근 불가(내부만 가능), 대문자 : public 패키지 외부에서 접근 가능
- Go : main 패키지는 특별하게 인식 -> 컴파일러 공유 라이브러리x, 프로그램의 시작점 start point!
- 내가 만든 라이브러리 이용
- section4 / lib / lib.go 파일
// 라이브러리 접근제어(1)
package lib
import "fmt"
func init() {
fmt.Println("lib Package > init start!")
}
//num 체크 (입력값 10보다 크면 true, 이외는 false)
func CheckNum(c int32) bool {
return c > 10
}
- package lib 으로 생성후 num 체크 함수 작성
- section4 / package2.go 파일
package main
//go path가 goproject로 지정
import (
"fmt"
checkUp "section4/lib" //우리가 만든 라이브러리
_ "section4/lib2"
)
func main() {
fmt.Println("10보다 큰 수? : ", lib.CheckNum(4)) //대문자여야 접근가능 public
}
- main에서 import로 내가 만든 라이브러리 불러와서 lib.CheckNum으로 함수 사용 가능
- checkUp "section4/lib" : Alias 별칭사용
- _ "section4/lib2" : 빈 식별자, 지금 사용하진 않지만 나중에 사용할 것이라는 뜻
- 초기화
//go 초기화 함수(1)
package main
import (
"fmt"
)
func init() {
fmt.Println("Init Method Start!")
}
func main() {
fmt.Println("Main Method Start!")
}
- init : 패키지 로드시에 가장 먼저 호출, 한 파일에 여러개 있어도됨
- 가장 먼저 초기화되는 작업 작성 시 유용하다
- import한 외부 패키지 사용시에 그 패키지에 있는 초기화나 작업 먼저 실행후 main으로 넘어옴
데이터 타입
- bool
// 데이터 타입 : Bool(1)
package main
import "fmt"
func main() {
//예제1
var b1 bool = true
var b2 bool = false
b3 := true
fmt.Println("ex1 : ", b1)
fmt.Println("ex2 : ", b2)
fmt.Println("ex3 : ", b3)
fmt.Println("ex4 : ", b3 == b3)
fmt.Println("ex5 : ", b1 && b3)
fmt.Println("ex6 : ", b1 || b2)
fmt.Println("ex7 : ", !b1)
//예제1 논리연산자
fmt.Println("ex : ", true && true)
fmt.Println("ex : ", true && false)
fmt.Println("ex : ", false && false)
fmt.Println("ex : ", true || true)
fmt.Println("ex : ", true || false)
fmt.Println("ex : ", false || false)
fmt.Println("ex : ", !true)
fmt.Println("ex : ", !false)
//예제2 비교연산자
num1 := 15
num2 := 37
fmt.Println("ex : ", num1 < num2)
fmt.Println("ex : ", num1 > num2)
fmt.Println("ex : ", num1 == num2)
fmt.Println("ex : ", num1 != num2)
}
- Bool(Boolean) : 참과 거짓
- 조건부 논리 연산자랑 주로 사용 : !, ||(or), &&(and)
- 암묵적 형변환 안됨 : 0, Nil -> False 변환 없음
- Numeric, Go에서 다양하게 사용함(복소수도 있음)
//데이터 타입 : Numeric(1)
package main
import "fmt"
func main() {
var num1 int = 17
var num2 int = -68
var num3 int = 0631 //8진수
var num4 int = 0x32fa2c75 //16진수
fmt.Println("ex1 : ", num1)
fmt.Println("ex1 : ", num2)
fmt.Println("ex1 : ", num3)
fmt.Println("ex1 : ", num4)
}
- 데이터 타입 : 숫자형
- 정수, 실수, 복소수
- 32bit, 64bit, unsigned(양수)
- 정수 : 8진수(0), 16진수(0x), 10진수
//데이터 타입 : Numeric(2) go에서 다양하게 사용함
package main
import "fmt"
func main() {
//데이터 타입 : 숫자형
//정수형 문자 출력
//예제1
//아스키(영문)
//byte 8bit
var char1 byte = 72
var char2 byte = 0110
var char3 byte = 0x48
//예제2
//유니코드(한글)
//rune 32bit
var char4 rune = 50556 //유니코드
var char5 rune = 0142574 //44032(8진수)
var char6 rune = 0xC57C //44032(16진수)
//%c 문자, %d 10진수, %o 8진수, %x 16진수
fmt.Printf("%c %c %c\n", char1, char2, char3)
fmt.Printf("%d %d %d\n", char1, char2, char3)
fmt.Printf("%d %o %x\n", char1, char2, char3)
fmt.Printf("%c %c %c\n", char4, char5, char6)
fmt.Printf("%d %d %d\n", char4, char5, char6)
fmt.Printf("%d %o %x\n", char4, char5, char6)
}
- 부동소수점 오차 주의
//데이터 타입 : Numeric(3)
package main
import "fmt"
func main() {
//실수(부동소수점)
//floot32(7자리), floot64(15자리)
//예제1
var num1 float32 = 0.14
var num2 float32 = .75647
var num3 float32 = 442.0378373
var num4 float32 = 10.0
//지수 표기법
var num5 float32 = 14e6
var num6 float32 = .156875e+3
var num7 float32 = 5.32521e-10
fmt.Println("ex1 : ", num1)
fmt.Println("ex1 : ", num2)
fmt.Println("ex1 : ", num3)
fmt.Println("ex1 : ", num4)
fmt.Println("ex1 : ", num4-0.1)
fmt.Println("ex1 : ", float32(num4-0.1)) //형변환
fmt.Println("ex1 : ", float64(num4-0.1)) //범위 폭 넓어지면 미세하게 값 달라짐. 부동소수점 오차 일어남 / 은행권등 주의!!
fmt.Println("ex1 : ", num5)
fmt.Println("ex1 : ", num6)
fmt.Println("ex1 : ", num7)
}
- 값 계산할때 형변환으로 형 맞춰줌
- 주의) 범위 폭(ex.float64) 넓어지면 미세하게 값 달라짐 -> 부동소수점 오차 일어남.
'GO언어' 카테고리의 다른 글
[GO] 제어문 및 반복문 (0) | 2023.01.16 |
---|---|
[GO] Go언어 특징,변수,상수,열거형 (1) | 2023.01.05 |
[GO] 개발 환경 구축, 컴퓨터 원리 (1) | 2023.01.03 |