본문 바로가기
반응형

전체 글66

cannot find package ~ in any of: (from $GOROOT) ~ (from $GOPATH) 리눅스 환경에서 go build를 할 시, 다음과 같은 오류 발생하였다. 원인은 작성한 코드내에서 사용할 패키지를 찾지 못해서 발생한 오류인데, 다음과 같은 해결 방법이 있다. 방법 1. 환경 변수 설정을 잘 못하여서 발생한 오류일 수도 있다. go env 명령어를 사용하여 GOPATH 확인 후 GOPATH를 재 설정한다. 방법 2. go.mod 파일을 삭제 후 go mod init [프로젝트 명] 명령어를 사용하여 .mod 파일을 새로 생성한다. 2022. 4. 23.
JSON data 사용하기 encoding/json 패키지를 사용하여 JSON 데이터를 사용할 수 있다. 1. Json 인코딩 Json 포멧으로 변환하기 위해서는 Marshal() 함수를 사용한다. 다음의 예제는 json 데이터를 변환하여 결과를 출력한다. package main import ( "encoding/json" "fmt" ) // json key 값 type User struct { // struct 내에 field 선언 후 뒤에 `json:"[key]"` 를 붙이면 key 값을 따로 지정할 수 있다. Id string `json:"id"` Pw int `json:"password"` } func main() { // json value 값 지정 userInfo := User{"uhm", 1234} // JSON 인코.. 2022. 4. 23.
ioutil 패키지를 사용하여 파일 읽기/쓰기 ioutil 패키지를 사용하면 간단하게 파일을 읽고 쓸 수 있습니다. 파일 내용을 작성하기 위해서는 string type을 byte slices로 변경해줘야 합니다. 또한 파일을 읽을 시 byte slices로 읽어온 내용을 사용하려면 string으로 변환 해줘야 합니다. 다음의 사용 예시를 참고하면 쉽게 이해할 수 있습니다. 사용 예시 package main import ( "fmt" "io/ioutil" "os" ) func main() { str := "Hello, World!" // 파일에 입력할 문자 내용 // 파일명은 hello.txt // str(파일에 입력할 문자)을 byte slice로 변환 // 파일권한은 664(파일소유자는 읽기/쓰기 가능, 일반 사용자는 읽기만 가능) err := i.. 2022. 4. 23.
Local package import 오류 사용자가 작성한 패키지를 사용하기 위해 import에 추가한 후 터미널에서 run을 했을 때 다음과 같은 오류가 발생하였을 때 cannot find package "" in any of : 또는 import "" cannot import absolute path 방법 1. 코드 내 import 경로가 제대로 되어 있는지 확인한다. => '상위 디렉토리 명/패키지 명" package main import ( "상위 디렉토리 명/패키지 명" ) func main() { ... } 방법 2. 모듈 확인 => .mod 파일이 생성되어 있는지 확인한다. 터미널에 ' go mod init [모듈 명] '으로 .mod 파일 생성 go mod init [모듈명] .mod 파일을 생성한 후 module 설정이 제대로 되.. 2022. 2. 21.
Golang 헷갈리는 문법 복습 - interface 인터페이스가 어떤 용도로 사용되는지, 왜 이런 식으로 만들어 졌는지에 대한 이해가 선행되면 정의를 이해하는 게 훨씬 쉽다. 그래서 우선 인터페이스가 왜 쓰이는지에 대해 설명 후, 구체적인 것에 대해서는 이후에 설명하도록 하겠다. 1. Interface를 사용하는 이유 Go 언어는 타입에 민감하다. 함수의 경우 마찬가지다. 함수는 정해진 타입의 매개변수만 받고, 정해진 타입에 맞게 연산을 하고, 정해진 타입에 맞게 결과를 반환한다. 하지만 여러타입에 대해 적용할 수 있는 함수를 만들어야 할 때도 있다. Go 언어에서 이러한 함수를 만들기 위해서는 각 타입별로 적용 가능한 함수들을 만들고, 이를 모두 합쳐서 하나의 큰 함수로 만드는 것이다. 하지만 여기서는 막히는 부분이 하나 있다. Go언어는 매개변수를 받.. 2022. 2. 19.
Golang 헷갈리는 문법 복습 - 배열과 슬라이스 배열 Go언어에서 배열은 길이가 고정되어 있고, 인덱스는 0부터 시작한다. var a [5]int // int 형이며 길이가 5인 배열 선언 a[2] = 7 // 배열의 세 번째 요소에 7 대입 fmt.Println(a) // [0 0 7 0 0] var a [5]int = [5]int{1, 2, 3, 4, 5} // int형이며 길이가 5인 배열을 선언하고 초기화 var b [5]int{1, 2, ,3, 4, 5} // 배열을 선언할 때 자료형과 길이 생략 c := [5]int{1, 2, 3, 4, 5} // 배열을 선언할 때 var 키워드, 자료형과 길이 생략 배열의 크기에 ...을 사용하면 초기화할 값의 개수에 따라 자동으로 크기가 설정된다. a := [5]int{1, 2, 3, 4, 5} // 배.. 2022. 2. 19.
Zero 부터 시작하는 Golang - 기본문법3 에러 Go는 내장 타입으로 error 라는 인터페이스(Interface) 타입을 갖는다. Go 에러는 이 error 인터페이스를 통해서 주고 받게 되는데, 이 인터페이스는 다음과 같은 하나의 메소드를 갖는다. 개발자는 이 인터페이스를 구현하는 커스텀 에러 타입을 만들 수 있다. type error interface { Error() string } 에러 처리 함수가 결과와 에러를 함께 반환한다면, 이 에러가 nil 인지를 체크해서 에러가 없는 지를 확인할 수 있다. 아래의 예제에서 os.Open() 함수는 func Open(name string) (file *File, err error)와 같은 함수 원형을 갖는 것으로 첫 번째는 File 포인터를 두 번째는 error 인터페이스를 반환한다. 그래서 이 .. 2022. 2. 19.
Zero 부터 시작하는 Golang - 기본문법2 Go 패키지(Package) Go언어는 패키지를 통해 코드의 모듈화, 재 사용 기능을 제공한다. Go언어는 패키지를 사용해서 작은 단위의 컴포넌트(Component)를 작성하고, 이러한 작은 패키지를 활용하여프로그램을 작성할 것을 권장한다. Go언어에 사용하는 표준 패키지는 https://golang.org/pkg/ 에 자세하게 설명되어 있다. Main 패키지 일반적으로 패키지는 라이브러리로서 사용되지만, 'main' 패키지는 Go 컴파일러(Compiler)에 의해 특별하게 인식된다. 패키지 명이 main인 경우, 컴파일러는 해당 패키지를 공유 라이브러리가 아닌 실행(executable) 프로그램으로 만든다. 그리고 이 main 패키지 내의 main() 함수가 프로그램의 시작점인 Entry Point가 .. 2022. 2. 13.
Zero 부터 시작하는 Golang - 기본문법1 클로저(Closure) 클로저는 함수 안에서 함수를 선언 및 정의할 수 있고, 바깥쪽 함수에 선언된 변수에도 접근할 수 있는 함수를 말한다. 바깥 함수가 변수와 자기 자신(함수)을 둘러싸고(close over)있다고 해서 클로저(closure)라고 한다. 아래의 예제는 nextValue() 함수는 int를 반환하는 익명 함수(func() int)를 반환하는 함수이다. Go언어에서 함수는 일급 함수로서 다른 함수로 부터 반환되는 반환 값으로 사용될 수 있다. 그런데 여기서 이 익명 함수가 그 함수 바깥에 있는 변수 i를 참조하고 있다. 익명 함수 자체가 지역 변수로 i를 갖는 것이 아니기 때문에(만약 그렇게 되면 함수 호출 시 i는 항상 0으로 설정된다.) 외부 변수 i가 상태를 계속 유지하는 값을 계속 .. 2022. 2. 13.
반응형