언어/Golang
-
[Golang] map에서 key값 존재유무 확인언어/Golang 2017. 2. 2. 20:38
Go언어에는 상수 시간에 키의 존재를 확인할 수 있는 집합은 따로 제공하고 있지 않습니다. 여기서 가장 단순한 방법은 맵을 이용하면서 값을 bool형으로 주는 것입니다. 문자열에 중복되어 들어가 있는 글자가 있는지 검사하는 함수를 만드는 예제입니다.package main import "fmt" func hasDupeRune(s string) bool { runeSet := map[rune]bool{} for _, r := range s { if runeSet[r] { return true } runeSet[r] = true } return false } func main() { test := "가나다라" fmt.Println(hasDupeRune(test)) test1 := "가나다라가" fmt.Prin..
-
[Golang] if문에 세미콜론(;) 의미언어/Golang 2017. 2. 2. 20:22
아래의 두 예제는 같은 의미입니다.1.if v, err := Read(); err == nil { // do something with v, because Read() did not // had an error (err) }2.v, err := Read() if err == nil { // do something with v } 두 문법의 결과는 같지만 차이점은 첫 번째 예제에서는 v와 err의 범위는 if {}블록으로 제한됩니다. 두 번째 예제에서는 v와err은 선언된 블록에 속해 있습니다. 즉, if {}에 속해있지 않다는 뜻입니다. {}블록에서 ;을 사용하는 것과 거의 같습니다.if문에 ;을 사용할 땐, 선언되는 변수가 조건문 안에서만 사용된다고 확실시 될 때 사용하면 좋습니다.
-
[Golang] 파라미터 ... 의미언어/Golang 2017. 1. 18. 18:05
Go 패키지를 볼 때, 아래와 같은 문법을 사용한 함수를 심심찮게 볼 수 있습니다.func GetCommandLineMultiArgs(args ... string) { arguments := make(map[string]*string) for _, arg := range args { tempVar := flag.String(arg, "", arg) arguments[arg] = tempVar } flag.Parse() } ...의 의미는 파이썬의 *args와 유사합니다. 파라미터로 입력된 타입의 데이터를 몇 개 받을지 확실하지 않을 때 사용합니다.아래는 String 타입의 데이터를 받는 예제입니다.package main import "fmt" func main() { test("111") test("11..
-
[Golang] init() 함수 호출 시점언어/Golang 2017. 1. 18. 18:00
var WhatIsThe = AnswerToLife() func AnswerToLife() int { return 42 } func init() { WhatIsThe = 0 } func main() { if WhatIsThe == 0 { fmt.Println("It's all a lie.") } }AnswerToLife()함수는 init()함수가 호출되기 이전에 호출이 됩니다. 그리고 init() 함수는 main() 함수가 호출되기 이전에 호출이 됩니다.명심해야 할 것은 main()이 있던 없던 init()함수는 항상 호출됩니다. 따라서 init()함수를 가지고 있는 패키지를 import할 경우 init()함수가 실행됩니다. 또한, 패키지 당 여러 init () 함수를 가질 수 있으며, 모든 변수가 초기..
-
[Golang]슬라이스 용량 주의사항언어/Golang 2017. 1. 18. 09:44
슬라이스는 가변적으로 변하기 때문에 연속된 메모리 공간을 활용합니다. 따라서 용량에 제한이 있습니다.만약 슬라이스를 make([]int, 5)와 같이 선언하면 용량도 5가 됩니다. 여기에 임의의 정수값 하나를 덧붙인다면 용량이 부족하므로 현재 상주하고 있는 메모리 공간이 아닌 더 넓은 메모리 공간으로 이사를 가게 됩니다.이러한 작업이 빈번하게 일어나면 당연히 성능이 저하됩니다. make([]int, 5, 10)과 같이 가능하면 슬라이스를 사용할 때 최대로 사용할 메모리 공간을 미리 설정하는 것이 성능에 도움이 됩니다.
-
[Golang] 현재 폴더 경로 확인언어/Golang 2017. 1. 17. 17:13
import ( "os" ) func main() { path, _ := os.Getwd() )
-
[Golang] Command line arguments 사용하기 (인자값 사용하기)언어/Golang 2016. 12. 1. 14:35
go를 실행할 때 사용자임의로 인자값을 추가하여 실행할 수 있습니다. go에서 이러한 인자값을 받아서 처리하고자 할 때, 다음과 같이 실시합니다.package main import ( "os" "strings" ) func main() string{ var argu string for _, v := range os.Args { // 커맨드라인으로 받은 한 줄의 명령어를 스페이스바 단위로 쪼개어 반복문 실행. if strings.Index(v, "-com") == 0 { // -com이라는 값이 있으면 아래와 같이 사용자가 원하는 값 이외의 값을 제거 argu = strings.Replace(v, "-com=", "",-1) break } } fmt.Println(argu) } # 실행 go run tes..
-
[Golang] Database/sql언어/Golang 2016. 11. 26. 16:27
PackageSQL 데이타베이스를 사용하기 위해서는 표준패키지 database/sql을 사용합니다. database/sql 패키지는 관계형 데이타베이스들에게 공통적으로 사용되는 인터페이스들을 제공하고 있습니다.database/sql 패키지는 여러 종류의 SQL 데이타베이스를 지원하는데, 각각의 데이타베이스 Driver와 함께 사용됩니다.MySQL: https://github.com/go-sql-driver/mysqlMSSQL: https://github.com/denisenkom/go-mssqldbOracle: https://github.com/rana/oraPostgres: https://github.com/lib/pqSQLite: https://github.com/mattn/go-sqlite3DB2:..
-
[Golang] Defer언어/Golang 2016. 11. 25. 17:45
defer문은 주변 함수가 반환될 때까지 함수의 실행을 연기시킵니다. 지연호출의 인수는 즉시 평가되지만 주변 함수가 반환 될 때까지 함수 호출이 실행되지 않습니다. 예시1package main import "fmt" func main() { defer fmt.Println("world") fmt.Println("hello") } // 결과 hello world예시2package main import ( _ "github.com/lib/pq" "database/sql" ) func main() { // sql.DB 객체 db 생성 db, err := sql.Open("mysql", "root:pwd@tcp(127.0.0.1:3306)/testdb") // db 차후에 닫기 defer db.Close() /..
-
[Golang] fmt print언어/Golang 2016. 11. 11. 14:01
go에서 표준출력 및 입력을 하기 위해선 fmt라는 패키지를 사용해야 합니다. 기능에 따라 여러 print이 존재하여 처음 접하면 어느 것을 사용할 지 햇갈립니다. 또한 데이터를 출력 및 받고자 할 때 데이터 타입에 따라 사용해야 하는 포맷이 다르기 때문에 확인을 하고 사용해야 합니다.fmt.Fprint (OS)print 앞에 F가 붙으면 파일 입출력에 해당합니다. fprint는 파일에 쓰는 용도입니다.func Fprint, Fprintf, Fprintln문법/* Fprint */ // Fprint가 여러번 호출되도 한 줄로 이어서 파일에 쓰임 fmt.Fprint(파일, 파일에쓰고자 하는 데이터) /* Fprintln */ // Fprintln 여러번 호출될 때마다 마지막 줄에 줄넘김 (CRLF)가 추가..