구름에서 하는 무료 온라인 강의입니다. (링크)
한번 진행해보겠습니다.
Go에서 변수를 선언할 때 가장 큰 특징은 'Short Assignment Statement'라고 불리는 := 입니다. 이를 사용하면 별다른 형 선언 없이 타입 추론이 가능합니다. 굉장히 유용하게 쓰이니 잘 알아둬야 합니다.
하지만 주의해야할 점은 이 용법은 함수(func) 내에서만 사용이 가능합니다. 따라서 함수 밖에서(전역 변수)는 꼭 var 키워드를 선언해줘야합니다.
Go언어에서는 선언만 하고 쓰지 않았다면 에러를 발생하며 컴파일에 실패합니다. 이는 변수, 패키지, 함수 등 모든 선언에서 동일하게 적용됩니다.
package main
import "fmt"
var globalA = 5 //함수 밖에서는 'var' 키워드를 입력해야함.
// 꼭 형을 명시하지 않아도 됨
func main() {
var a string = "goorm"
fmt.Println(a)
var b int = 10
fmt.Println(b)
var d = true
fmt.Println(d)
var e int
fmt.Println(e)
f := "short"
fmt.Println(f)
fmt.Println(globalA)
}
이런것도(아래) 사용할수 있다고합니다.
package main
import "fmt"
const (
c1 = 10 //첫 번째 값은 무조건 초기화해야 함
c2
c3
c4 = "goorm" //다른 형 선언 가능
c5
c6 = iota //c8까지 index값 저장
c7
c8
c9 = "earth"
c10
c11 = "End"
)
func main() {
fmt.Println(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)
}
// 10 10 10 goorm goorm 5 6 7 earth earth End
fmt.Scanln(&num1, &num2, &num3)
파이썬이랑 다르게
var num1, num2, num3, result int
fmt.Scanln(&num1, &num2, &num3)
result = (num1 * num2) + num3
fmt.Printf( num1, num2, num3, result)
이렇게 사용하면 에러 발생합니다.
var num1, num2, num3, result int
fmt.Scanln(&num1, &num2, &num3)
result = (num1 * num2) + num3
fmt.Printf("%d x %d + %d = %d\n", num1, num2, num3, result)
이렇게 출력할때는 출력 자료형을 적어줘야합니다.
123장 내용끝
타입확인 방법입니다.
unsafe.Sizeof(변수)
부울형은 특별한건 없습니다.
int8은 8byte int16은 16byte 한눈에 알아보기 쉽습니다.
정밀도가 중요할때 사용합니다.
스트링은 immutable 타입으로 값을 수정할 수 없습니다.
예를 들어, var str string = "hello"와 같이 선언하고 str[2] = 'a'로 수정이 불가능합니다.
기타 타입으로 byte와 rune이 있습니다.
byte는 uint8과 똑같은 자료형이지만 , 바이트 값을 8비트 부호없는 정수 값과 구별하는데 사용됩니다. (??똑같은데 어떻게 사용된다는건지...)
rune은 int32와 똑같은 자료형이라고 볼 수 있습니다. 관례상 문자값을 정수 값과 구별하기 위해 사용합니다. (??어떻게 구별한다는건지..)
백틱문자를 쓰면 Raw String Literal 을 사용할수 있습니다. \n 같은 특수문자가 스트링으로 인식됩니다.
Go에는 자동 형 변환(묵시적 형 변환)이 없고 강제 형 변환(명시적 형 변환)만 존재합니다.
타입확인할때 두번째줄로 하면 uintptr 형으로 출력됩니다. 조심!
fmt.Printf("%T, %d\n", num3t, num3t)
fmt.Printf("%T, %d\n", unsafe.Sizeof(num3t), num3t)
서식문자 출력 형태
입력을 받을 때
fmt.Scanf("%d-%d", &RRNf, &RRNt)
fmt.Scanf("%s", &name)
fmt.Scanf("%f", &height)
여기서 아래 처럼 하면 됐던것 같은데 에러가 발생합니다.
이유는 그전에 사용하던것은 Scanln이였고 이것은 Scanf이기 때문입니다. 주의!!
fmt.Scanf(&height)
어떻게 쓰는지 예시입니다.
package main
import "fmt"
func main() {
sum := 0
for i := 1; i <= 10; i++ {
sum += i
}
fmt.Println("1부터 10까지 정수 합계:", sum)
}
while은 이렇게 씁니다. (go는 while문이 없습니다. )
package main
import "fmt"
func main() {
n := 2
for n < 100 {
fmt.Printf("count %d\n", n)
n *= 2
}
}
배열 선언법
var arr [3]int = [3]int{1, 2, 3}
for range 문법은 이렇게 사용합니다.
func main() {
var arr [6]int = [6]int{1, 2, 3, 4, 5, 6}
for index, num := range arr {
fmt.Printf("arr[%d]의 값은 %d입니다.\n", index, num)
}
}
파이썬 처럼 index 자리에 _ 넣어도 되고, num을 안적어주면 index만도 얻어올수 있습니다.
for range를 사용하면서 내가 한 실수!!