SCSS

css를 편하게 사용할 수 있는 스타일 시트

css에 해당하는 변수를 만들 수도 있고 부모와 자식을 관계가 돋보이도록 작성할 수도 있습니다.

반복을 줄여줍니다. 깔끔한 코드를 작성할 수 있습니다. 직관적이고 이해하기 쉽습니다.

scss 파일을 컴파일하여 css파일을 만들게 됩니다.

VSCODE Extension Live sass compiler

php를 쓰고 있던 node를 쓰고 있던 이 익스텐션을 통해 scss파일을 css파일로 컴파일하여 html에 style시트로 붙여 넣을 수 있습니다.

Extension을 설치하고 sass폴더 및 scss파일을 만들고 그 파일로 들어가서 하단 바에서 아래와 같은 버튼을 찾은 뒤에 눌러주기만 하면 css파일을 생성합니다.

map파일과 css파일이 sass폴더 안에 생성되는 것이 싫어서 몇 가지 설정만 바꿔주었습니다.

vscode setting.json에서 다른 세팅 안에 넣는 것을 주의하며 제일 바깥 중괄호 안에 넣어줍니다.

{
	"liveSassCompile.settings.generateMap": false, // Map을 안 만드는 것
    "liveSassCompile.settings.formats": [ 
        {
            "format": "expanded",
            "extensionName": ".css",
            "savePath": "~/../css" // css경로 지정
        }
    ],
}

극 장점

css를 하다보면 element를 찾는 것 또는 부모 요소를 찾는 것에 시간이 다 뺏기는 경우가 있다.

scss 파일은 부모와 자식 요소를 한 곳에 몰아넣을 수 있고 직관적이다. json파일을 보는 느낌?

아직 많지 않아서 그럴 수도 있지만 변수로 만들어서 중복을 제거할 수도 있고 이게 말로만 이렇게 들을 때는 몰랐는데 직접 써보니까 왜 좋다는지 알겠다.

1. for 반복(loop) 문

go에서는 for문만을 사용한다

 

forEach나 for in 같은 경우는 사용할 필요가 없다고 한다

 

왜냐하면 range를 사용할 것이기 때문이다 

(1) range

range란? 각각의 배열 요소에 반복할 내용을 실행시킨다

 

형태 : for 변수 := range 범위가 될 어떤 것(배열, 슬라이스, 문자열){

                  반복할 내용

         }

 

예시) superAdd함수에 들어있는 인자(2,3,4,5,7,9)의 개수 6개만큼 numbers를 출력한다  ≒forEach( ) in javascript

func superAdd(numbers ...int) int{
	for number := range numbers{ //반복할 횟수는 numbers의 개수
		fmt.Println(number)	 //반복될 내용
    }
	return 1
}

func main(){
	superAdd(2,3,4,5,7,9)       //numbers의 개수는 6개
}

실행결과를 보면 

이렇게 나오게 되는데 배열 요소의 개수만큼 자동으로 index값을 받게 되어서라고 한다

array(배열)과 slice(슬라이스: 융통성 있는 배열?)에서 range반복문은 index값과 배열 안의 값을 생성한다(index먼저 생성)

 

index를 보기 싫다면 for의 변수 중 처음은 무시하고( _ 언더바 사용 ) 두 번째 것을 입력하면 된다

이렇게

func superAdd(numbers ...int) int{
	for _,number := range numbers{ 
		fmt.Println(number)	 
    }
	return 1
}

func main(){
	superAdd(2,3,4,5,7,9)       

(2) i 사용

C언어와 비슷하다

꼭 i만 써야 되는 것은 아니다(하지만 아마도 수는 안될 것이다)

형태: for i:=0; i <범위(대신 수 형태여야 함); i++{

            반복할 내용

       }

(3) 총합 구하기 예제

package main

import (
	"fmt"
)

func superAdd(numbers ...int) int {
	total := 0                   	//총합이 되어줄 친구 반복문 밖에 있어야함
	for _, number := range numbers {//index는 보기싫어서 _로 무시
		total = number + total		//total변수에 각각의 수를 더해주기
	}
	return total
}

func main() {
	result := superAdd(2, 3, 6, 7, 9, 10)
	fmt.Println(result)
}

//결과 37

요약

1. for만 사용(for in, forEach 없음)

2.range는 배열에선 index값을 먼저 생성한다

3.i 같은 변수로도 범위를 구할 수 있다

 

2. if ~ else, switch~case

1. if ~ else

1) 다른 언어들과 다르게 ( )이나 :이 필요 없다

2) VScode에서 제공하는 extention return값을 주면 else를 쓸 필요 없다

3) if문을 쓰는 도중에 변수를 생성할 수 있다(무엇을 위한 변수인지 알아보기 쉬움) 

	if koreanAge := age + 2; koreanAge < 18 { //(),:필요없이 조건 바로적음 //koreanAge := age + 2; if문을 쓰는 도중에 변수만들기
		return false
	} 
	return true //else{ return true} 였을텐데 return true만 적어도 실행가능 
	

else if 조건을 추가할 때 쓰임

if 조건{

 

} else if 조건{

 

} else {

 

}

2. switch/case

1) C나 javascript와 많이 비슷하다(파이썬은 switch를 사용하지 않음)

2) if~else와 마찬가지로 쓰는 도중에 변수를 생성할 수 있다

3) else if를 도배할 필요 없이 case로 짧게 짧게 쓸 수 있다

 

package main

import (
	"fmt"
)

func canIdrink(age int) bool {
	switch koreanAge= age+2; koreanAge { //switch문 도중 변수 선언 가능
	case age < 18:			//만약 if문을 썼다면 else if로 도배될 것을 case로 짧게 짧게
		return false
	case age ==18:
		return true
	}
	return false
}

func main() {
	result := canIdrink(18)
	fmt.Println(result)
}

 

1. main Package

패키지란?

Go언어가 코드의 모듈화, 코드의 재사용과 같은 기능을 제공하기위해 사용하는 것이다

 

이전에 만든main.go는 패키지라고 불리고 앞서 말했듯 컴파일러에게 특별하게 인식된다

 

컴파일러는 main.exe(실행파일)을 만든다

 

Go에서는 main package를 쓰고 있다는 것을 작성해주어야한다

또 main package는 main 함수를 필요로한다 Go 프로그램의 시작점이 되는 부분이기 때문이다(C의 느낌이 강하게 난다)

package main

func main() {
} 

프로그램을 실행시키는 방법도 특이하다 터미널(명령 프롬프트)에 파일 저장 후 go run main.go라 입력해야 한다

 

2. fmt Package and Import

fmt는 formatting을 위한 패키지이다 이때 중요한 것은 함수 첫 글자는 항상 대문자로 써야한다는 점이다

그렇지 않을경우 나타나지지 않는다

 

첫글자가 소문자일경우는 private한 함수이고 대문자일 경우는 export된 함수이기 때문이다(이건 Go에서 지정한 약속같다)

package main

import "fmt"

func main() {
fmt.Println("Hello world!") //Println의 P가 대문자이다 export!
}

※컨트롤키를 누른채 fmt를 클릭하게된다면 fmt 안의 내용을 알 수 있다  또 fmt를 사용하지 않게 되면 자동으로 import문이 사라진다 (VScode의 장점)

3. function(함수)

변수와 상수 variable(=var), constant(=const) 각각 '변할수 있음'과 '변할수 없음'

 

Go에서 변수를 선언하기위해서는 type도 알려주어야한다 ex) var name string = "pavk"

 

함수 안에서는 이것을 축약형으로 name :="pavk"라고 쓸 수 있다(type은 Go가 알아서 찾아준다고 한다ㅎㅎ)  

name := "nico" //축약형
var name string = "lynn" //원래(너무 김)

 

또한 Go는 만들어 놓고 쓰지 않는 것을 굉장히 싫어한다 쓰지않으면 에러를 발생시킨다

 

 

Go는 함수에서 반환값을 2개 이상 가질 수 있다 (<--이것이 아마 병행성의 이유이지 않을까?)

또한 println처럼 인자를 무제한으로 가지려면 ...type을 써주면  된다

func lenAndUpper(name string) (int, string) {
	return len(name), strings.ToUpper(name) //2개의 반환값을 반환함!!
}

func repeatMe(words ...string) { //'...'만 있다면 무제한 인자!!
	fmt.Println(words)
}

func main() {
	repeatMe("nico","lynn","dal","marl","flynn","pavk")//이렇게 많은 인자도 출력이 가능하다
}

naked return : 반환값을 return 뒤가 아니라 반환값의 type 앞에 적을 수 있다

defer : 반환을 한 후에 추가로 실행을 시킬 수 있다  

func lenAndUpper(name string) (lenght int, uppercase string) { //여기 type들 앞에서 변수처럼 만들어지고 반환값으로도 사용된다
	defer fmt.Println("I'm done") //반환하고 추가로 I'm done을 출력함
	lenght = len(name)
	uppercase = strings.ToUpper(name)
	return			//여기가 아니라
}

defer를 화인해보기위해서 출력을 해보았다

package main

import (
	"fmt"
	"strings"
)

func lenAndUpper(name string) (length int, uppercase string) {
	defer fmt.Println("I'm done")//2.두번째로 실행되어야한다
	length = len(name)
	uppercase = strings.ToUpper(name)
	fmt.Println(length, uppercase)  //1.먼저 실행되어야 defer가 실행되는것을 알 수 있다
	return
}

func main() {
	totalLength, up := lenAndUpper("nico")
	fmt.Println(totalLength, up)//3.세번째
}

 

실행결과!

 

예전부터 Go언어를 접해보고 싶었지만 영어 때문에 안 배우고 있었는데

 

슬랙에 올라온 한국어 패치가 되었다는 내용을 보자마자 달려갔다(올라온지는 꽤 됐었고 어제 봤음)

https://nomadcoders.now.sh <--노마드코더 슬랙

 

그래서 Go란 무엇이냐?

Go는 2009년 구글이 개발한 프로그래밍 언어로 가비지 컬렉션 기능이 있고, 병행성을 잘 지원하는 컴파일 언어라고 한다

 

(1) 가비지 컬렉션(쓰레기 수집?)? ==> 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기능이다.

 

(2) 병행성? ==> 컴퓨터 과학에서 여러 계산을 동시에 수행하는 시스템의 특성으로, 잠재적으로는 서로 상호 작용이 가능하다. 이와 상대적인 개념으로는 병렬성이 있다

 

(1)(2)를 합치면? 실행 속도가 빠르다!! 

 

니꼬쌤도 빠르다는 것을 빨리 보여주고 싶어서 앞서 우리가 했던 파이썬 스크래핑과 Go스크래핑을 비교하며 보여줬다

 

온라인 세팅은 파이썬 때와 마찬가지로 Repl.it을 사용할 수 있다

 

하지만 나는 니꼬쌤이 추천한 VScode(Visual Studio Code)와 Go를 설치하고 실행했다(오프라인)

VScode는 에디터 Go는 프로그래밍 언어이다

https://code.visualstudio.com/Download <--VScode는 여기서 윈도우, 맥, 리눅스 등 다양한 버전에 맞게 설치를 한다

https://golang.org/dl/<--Go는 여기서  윈도우, 맥, 리눅스 등 다양한 버전에 맞게 설치를 한다

 

Go를 설치할 때 주의할 점은 로컬 드라이브에 go폴더와 bin폴더를 만들어 주어야 한다 ex) C:\go\bin

 

go폴더는 GOPATH환경을 위해 꼭 필요하다고 한다 (자세한 내용은 Go를 다운로드하는 버튼을 클릭하면 나옴 영어로)

 

main.go는 go폴더 안의 src폴더 안의 github.com안의 자신의 닉네임 폴더 안의 learngo폴더에 저장해주면 좋다

ex) C:\go\src\github.com\pavk\learngo\main.go(없으면 생성해야 함)

 

main.go는 컴파일하기 위해서 꼭 필요한 패키지이다

 

공유, 오픈소스코드를 만들기 위함이라면 main.go를 만들면 안된다

 

나는 window10 사용자여서  VScode를 실행하여 새 파일을 생성고 저장을 통해 이름과 확장자를 main.go로 바꾸었다

 

그러면 VScode에서 Go를 사용하기 위해 업데이트를 하라고 막막막 뜨는데 그것을 다 하자는 대로 해주면 된다

 

이런 화면이 나왔다면 성공! 기본적인 세팅은 끝났다

 

+ Recent posts