Programming/Go 11

Go언어 Windows 10 계정 관리자 권한 얻기[빌드]

서론 Go언어 기반 애플리케이션을 개발 시, exec 모듈을 통한 커맨드 명령 호출이 필요할 때가 있다. 커맨드 명령을 호출할 경우 권한 문제가 없이 진행이 잘 되는 경우도 있지만, 그렇지 않은 경우도 있다. 리눅스 환경에서의 경우 관리자 권한을 얻기 위한 명령어는 "sudo"가 있지만 윈도우 환경에서는 애플리케이션 아이콘에서 우클릭을 통해 관리자 권한을 받아오는 경우가 대다수다. 만일 windows10 환경에서 권한 문제를 우클릭으로 진행해야 하는 경우 개발 시 커맨드 명령어 호출을 통한 개발은 불가능하다. 따라서 이 글에서는 Go기반 서비스 애플리케이션이 마주하는 윈도우 권한 문제를 해결하는 방법에 대해 다루도록 한다. 본론 go언어에서 관리자 권한 얻기 위한 방법으로는 빌드를 통한 실행파일 만들기가..

Programming/Go 2021.07.19

GO언어 의존성 패키지 관리 Go Module편

시작하기에 앞서.. 보통 의존성 관리는 내장함수패키지(GoRoot) 써드파티패키지(GoPath) 로컬 패키지(사용자 지정)를 통해 관리된다. 그러나 이러한 패키지 관리는 다른사람과 협업하거나 다른 PC에서 프로젝트를 진행해야 할 때 의존성패키지를 직접 다시 설치해야하는 번거로움이 발생한다. 이를 해결하기 위한 의존성 관리 도구인 dep과 Go module이 있고, 이글에서는 Go Module에 대해 다룰 것이다. 주요 핵심 내용은 빌드를 하기 위한 사용법에 관해 설명 할것이며, 원리나 자세한 내용은 추후 추가로 글작성을 할 예정이다. 빌드(build) 빌드에 실행 조건인 main으로는 아래의 그림과 같고, 실행하고자하는 main에서 필요한 의존성 라이브러리는 zap 이다. 실행하고자 하는 코드를 빌드를 ..

Programming/Go 2021.05.21

Go언어 맵(map) key value값있는지 확인하기

Go언어에서 특정값을 평균속도 O(1)의 성능을 나오는 자료구조 중 하나는 map이다. map은 또한 파이썬의 딕셔너리와 비슷하게 작동한다는 점도 있다. 이러한 map은 딕셔너리와는 약간 다른점이 있는데, 그건 특정 key값과 value값을 확인할수 있는 내장함수지원 여부이다. 파이썬은 지원되지만 Go언어에서는 내장함수가 지원되지 않는다. map의 key값과 value값의 존재유무를 알기에는 내장함수가 아닌 직접 확인해야하는 단점이 존재하지만 Go언어만의 문법을 살려 간단하게 key,value값의 존재유무를 알 수 있게 설명하겠다. 우선 map에 대한것은 알고있다는 가정하에 작성한다. map에 대한 사용법(생성, 추가, 삭제)을 간단하게라도 보려면 아래에 링크를 참조하면 된다. min94programmi..

Programming/Go 2021.03.02

Go언어 구조체(struct) 편

이번주제는 구조체다. 처음배울때 대학시절 C언어에서 본것으로 기억나는데, 요즘은 어떤지 모르겠다. C언어를 기준으로 설명하자면, 사용법은 비슷하다. 구조체에 변수와 타입을 정해주기만하면 선언이 완료된다. 아래 그림은 구조체를 활용하여 두수의 합을 나타낸다. [ 예 제 ] package main import "fmt" type Number struct { A int B int } func Add(a, b int) int { return a + b } func main() { number := Number{A: 1, B: 2} result := Add(number.A, number.B) fmt.Println(result) }

Programming/Go 2021.02.26

Go언어 리시버(receiver) 편

해당 주제는 리시버다. 설명하기에 앞서, 이번 코드에서는 구조체를 사용하고 있고, 이를 알고 있다는 전제하에 설명한다. 리시버는 특정 객체로부터 해당되는 함수를 정의하는 것이다. 즉 쉽게 말하면 특정 객체만 접근이 가능하다는 것이다. 따라서 아래에 그림에서 명시된 Add함수는 (n Number)리시버를 사용하여 Number 객체만 접근이 가능하도록 하였다. [ 예시 ] package main import "fmt" type Number struct { A int B int } func (n Number) Add(a, b int) int { return a + b } func main() { number := Number{A: 1, B: 2} result := number.Add(number.A, numb..

Programming/Go 2021.02.26

Go언어 예외처리(panic, recover) 편

Go언어에서의 예외처리 사용법은 다른언어들에서 볼 수 있는 tryCatch 구조와는 약간 다르다. 따라서 Go언어에서 이용할수 있는 예외처리 방법을 설명하고자 한다. [panic함수 예제] package main import "fmt" func main() { var a int = 1 if a == 1 { panic("에러") } fmt.Println("hello world") } panic함수 사용법을 정리하면 다음과 같다. 1. panic함수 실행시 프로그램이 종료가 실행된다. 2. panic 실행이후 에러위치를 나타낸다. [panic & recover 예제] 설명 var a의 값에 따라 예외처리를 알아보는 코드이다. 결과를 정리하면 다음과같다. 1. 에러(a가 1일때) 2. 성공(a가 1이 아닐때)..

Programming/Go 2021.02.26

Go언어 "import cycle not allowed" 편

여러 개의 모듈을 사용하여 프로젝트를 하다 보면 "import cycle not allowed" 문구가 나와 당황하게 되었던 적이 있을 것이다. 그러나 원인을 알면 사이클이 왜 안되는지 알 수 있다. 자세한 건 아래 그림과 코드로 설명을 하겠다. [main.go] package main import ( "fmt" "golang/cycle/Firstsub" ) func main() { Firstsub.AddCall() } [Firstsub.go] package Firstsub import ( "fmt" secondsub "golang/cycle/Secondsub" ) func AddCall() { fmt.Println("this is firstSub") secondsub.CallSecondSub() } [..

Programming/Go 2021.02.25

Go언어 [초간단] 명령어 Os.Args 편

Os.Args 명령어를 받는 가장 기본적인 방법이다. 각 매개변수는 일반 변수, 옵션, json 파싱등으로 구성된다. [예시] package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args[0]) // C:\Users\hhh\AppData\Local\Temp\go-build2452782392\b001\exe\main.exe fmt.Println(os.Args[1]) // hi fmt.Println(os.Args[2]) // -mode=programming fmt.Println(os.Args[3]) // {\"name\":\"홍길동\",\"age\":\"20\"} }

Programming/Go 2021.02.24

Go언어 [초간단] 유닛테스트 편

유닛테스트 사용법 - 유닛테스트에서는 함수이름에서 첫글자는 "Test"를 넣어야 한다. - 명령어는 "go test"로 실행이 가능하다 ※주의사항 - 매개변수를 형식에 맞춰야함. - 함수명이 하단그림과 같이 TestAbc는 가능하나 "Testabc"에서는 빌드가 안된다. 즉 "Test"와 뒤에올 글자를 구분하 여야한다. [사용 예] package main import "testing" func TestAbc(t *testing.T) { a:= 1 b:= 0 expected := a+b actual:=1 if actual != expected { t.Errorf("%d != %d", actual, expected) } } [결과]

Programming/Go 2021.02.23