: 코드를 묶는 단위
: 실행 시작 지점을 포함한 패키지
= main함수를 포함한 main 패키지
자신의 패키지가 아닌 외부 패키지를 가져와 쓰고 싶을 땐 import
import (
"fmt"
"math/rand"
)
-> 사용 시 math/rand
가 아닌 rand
로 접근하면 됨
import (
"fmt"
_ "string"
)
: 패키지 내 타입, 전역변수, 상수, 함수, 메서드 등을 외부로 공개해서 사용할 수 있음
Pseudo random 만들기 (유사 랜덤)
-> 랜덤을 요청할 때마다 다른 결과가 나오게 하는 내부 시퀀스를 가지도록 설계됨
"math/rand" 패키지 사용
rand.Seed(seed int64)
함수 : 랜덤 시드 설정
rand.Intn(n int) int
함수 : 0~n-1 사이 값 생성
내부 시퀀스가 정해져있기 때문에 아래와 같이 계속 같은 방식으로 랜덤 숫자를 생성하면 실행할 때마다 동일한 랜덤숫자들이 출력됨
for i := 0; i < 10; i++ {
fmt.Println(rand.Intn(100)) //0~99까지 랜덤 숫자 생성
}
-> 이를 해결하기 위해 랜덤 시드 설정
프로그램 실행마다 계속 변화하는 값
-> 시각!
time.Now() Time
: 현재 시각 제공 (리턴타입이 Time structure)func (t Time) UnixNano() int64
: Time structure t의 1970.01.01부터 현재까지 경과된 시간을 나노seconds 단위로 반환import (
"fmt"
"math/rand"
"time"
)
func main() {
t := time.Now()
rand.Seed(t.UnixNano()) //시간을 통해 랜덤 시드를 설정함 -> 매번 다른 랜덤값 생성
for i := 0; i < 10; i++ {
fmt.Println(rand.Intn(100)) //0~99까지 랜덤 숫자 생성
}
}
loc, _ := time.LoadLocation("Asia/Seoul")
const longForm = "Jan 2, 2006 at 3:04pm" //특정 format임. 이런 형식으로 문자열 읽겠다
t1, _ := time.ParseInLocation(longForm, "Jun 10, 2021 at 10:00pm", loc)
//시각 -> t1에 담김
fmt.Println(t1, t1.Location(), t1.UTC()) //UTC : 그리니치 천문대 기준 시각으로 변환
2021-06-10 22:00:00 +0900 KST Asia/Seoul 2021-06-10 13:00:00 +0000 UTC
const shortForm = "2006-Jan-02"
t2, _ := time.Parse(shortForm, "2021-Jun-14")
fmt.Println(t2, t2.Location())
2021-06-14 00:00:00 +0000 UTC UTC
t3, err := time.Parse("2021-06-01 15:20:21", "2021-06-14 20:04:05") //월 숫자로 사용하면 오류남
if err != nil {
fmt.Println(err)
}
fmt.Println(t3, t3.Location())
parsing time "2021-06-14 20:04:05" as "2021-06-01 15:20:21": cannot parse "-06-14 20:04:05" as "1"
0001-01-01 00:00:00 +0000 UTC UTC
d := t2.Sub(t1) //차이를구하면 duration
fmt.Println(d)
83h0m0s
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"time"
)
var stdin = bufio.NewReader(os.Stdin) //키보드input으로 값 읽어오기
func InputIntValue() (int, error) {
var n int
_, error := fmt.Scanln(&n) //한줄 입력받기
if error != nil {
stdin.ReadString('\n') //개행문자 만날때까지 버퍼비우기
}
return n, error
}
func main() {
rand.Seed(time.Now().UnixNano())
r := rand.Intn(100)
cnt := 1
for {
fmt.Println("숫자를 입력하세요:")
n, err := InputIntValue()
if err != nil {
fmt.Println("숫자를 입력하세요")
} else {
if n > r {
fmt.Println("입력하신 숫자가 더 큽니다")
} else if n < r {
fmt.Println("입력하신 숫자가 더 작습니다")
} else {
fmt.Println("숫자를 맞췄습니다. 축하합니다. 시도한 횟수:,", cnt)
break
}
cnt++
}
}
}