Go의 경우, 지정된 경로에서 go 코드를 작성해야한다
Go PATH
Mac : usr/local/go OR ~/go
(bin pkg src 이 있는 디렉토리, src가 없다면 src 파일 만들기)
Windows : C:\Program Files\Go 혹은
echo %GOPATH% cmd 창의 결과값이 지정된 경로
- 소스코드가 들어갈 디렉토리 만들기 in ~/go/src/
mkdir temp.com
- tracking dependencies 위한 새 모듈 init
cd temp.com
go mod init temp.com
- 소스코드 작성하기 - main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
- 실행하기
go run .
원하는 모듈, 코드를 다운받는 방법
NodeJS -> npm, python->pip 이지만,
Go -> 모든 것을 다운로드 경로별로 디렉토리가 만들어져 관리됨
jsonpackage 따위는 없답니다..!
Mac 에서 vscode .code 명령어 실행
command + shift + p
Shell Command : install 'code' command in PATH 검색해 install
현재 경로에서 vscode를 열 수 있다.
. code
import "fmt"
//or
import (
"fmt1"
"fmt2"
)
constant 는 변경 불가
const a string = "hi"
a = "bye" // 불가능
var 는 변경 가능
var name string = "y"
name = "z" // 가능
축약형 :=
타입은 첫번째 값을 기준으로 자동으로 찾아줌
func 안에서만 됨
name := "y"
return 타입을 뒤에 적어줌
파라미터의 타입을 뒤에 적어줌
func multiply(a int,b int) int{
return a * b
}
return 값들을 2개이상 받을 수 있다!
func lenAndUpper(name string)(int,string){
return len(name),strings.ToUpper(name)
}
... : arguments 여러개 받기
func repeat(words ...string){
fmt.Println(words)
}
func main(){
repeat("kim","lee","park")
}
return 값을 함수 선언시에 나타내면 return 문을 생략할 수 있다.
func lenAndUpper(name string)(leng int, upper string){
leng = len(name)
upper = strings.ToUpper(name)
}
defer : func가 끝나고 나서 code를 실행할 수 있다
func lenAndUpper(name string)(leng int, upper string){
defer fmt.Println("fin")
leng = len(name)
upper = strings.ToUpper(name)
}
for 이용
func superAdd(numbers ...int){
for i:=0;i<len(numbers);i++{
total+=numbers[i]
}
}
range 이용
func superAdd(numbers ...int) {
for _, number := range numbers{ //_는 index
total+=number
}
}
while 이용 -> 따로 없음
func main(){
for{
fmt.Println("loop")
return // break 대신 종료문
}
}
if 뿐만을 위한 변수 생성 가능
func canIDrink(age int)bool{
if koreanAge := age+2; koreanAge < 18 {
return false
}
return true
}
func canIDrink(age int)bool{
switch koreanAge := age+2; koreanAge{
case 10:return false
case 18:return true:
}
return false
}
C 와 동일
func main(){
a := 2
b := &a
*b =20
fmt.Println(a)
a = 15
fmt.Println(*b) //a의 주소값을 참조하기 떄문에 a가 바뀔때 같이 바뀐다
}
func main(){
names := []string{"kim","lee","park"}
names = append(names,"seo")
fmt.Println(names)
}
func main(){
infos :=map[string]string{"name":"lemon","age":"12"}
// map[key_type]value_type
for keys, value := range infos{
fmt.Println(value)
}
}
constructor method 가 없다.
Java : constructor(), python: __ init __
type person struct{
name string
age int
favFood []string
}
func main(){
favFood := []string{"a","b"}
kim :=person{name:"kim",age:18,favFood:favFood}
}