Programming/golang2022. 4. 7. 11:04

위는 하나씩 불러올 때, 아래는 factored 라는데  무슨 의미인지 와닫지 않네..

그러고 보니 factored import 의 경우 대괄호가 아니라 소괄호를 사용하는게 특이하다. 콤마로 구분도 안하고 무슨 문법일까?

import "fmt"
import "math"

import (
"fmt"
"math"
)

[링크 : https://go-tour-ko.appspot.com/basics/2]

'Programming > golang' 카테고리의 다른 글

golang for 반복문  (0) 2022.04.07
golang 사용자 함수  (0) 2022.04.07
golang 변수 할당문(짧은 변수 선언문) :=  (0) 2022.04.07
golang type 변환, type 확인하기  (0) 2022.04.07
go 변수, 상수, 배열  (0) 2022.04.06
Posted by 구차니
Programming/golang2022. 4. 7. 10:57

:=는 짧은 선언문 이라고 번역이 되어야 할 것 같은데

알아서 변수형을 선언해주는 착한(?) 녀석이지만 익숙해지기 전까지는 가독성에 좀 문제가 있을 것으로 보인다.

변수에 값을 할당하는게 아니라 변수 목록(?) 처럼 ,를 사용해서 선언하고 값들을 변수에 연속으로 할당해버리네.

눈에 잘 들어오지 않아, 쓰는 건 좀 주의해야 겠다.

the := short assignment statement can be used in place of a var declaration with implicit type.

var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"

[링크 : https://go.dev/tour/basics/10]

[링크 : https://go-tour-ko.appspot.com/basics/10]

'Programming > golang' 카테고리의 다른 글

golang 사용자 함수  (0) 2022.04.07
golang import  (0) 2022.04.07
golang type 변환, type 확인하기  (0) 2022.04.07
go 변수, 상수, 배열  (0) 2022.04.06
go 모듈 불러오기  (0) 2022.04.06
Posted by 구차니
Programming/golang2022. 4. 7. 10:52

요즘 언어답게 형변환하는 것을 함수를 통해 변환한다. (정확하게는 함수라기 보다는... 머라고 해야 할까?)

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

[링크 : https://go-tour-ko.appspot.com/basics/13]

 

import "reflect"

reflect.Typeof(varname)

 

[링크 : https://knight76.tistory.com/entry/go-타입-확인하는-방법-reflectTypeOf]

'Programming > golang' 카테고리의 다른 글

golang import  (0) 2022.04.07
golang 변수 할당문(짧은 변수 선언문) :=  (0) 2022.04.07
go 변수, 상수, 배열  (0) 2022.04.06
go 모듈 불러오기  (0) 2022.04.06
golang 다른 파일 함수 불러오기  (0) 2022.04.04
Posted by 구차니
Programming/golang2022. 4. 6. 12:44

var는 변수를 선언한다는 키워드일 뿐 변수명/변수타입으로 선언을 해주어야 한다.

bool
string
int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for uint8
rune // alias for int32
     // represents a Unicode code point
float32 float64
complex64 complex128

 

var varname int; 식이 아니라 var () 로도 변수 선언 블럭으로 만들 수 있나보네

package main

import (
"fmt"
"math/cmplx"
)

var (
ToBe   bool       = false
MaxInt uint64     = 1<<64 - 1
z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func main() {
fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
fmt.Printf("Type: %T Value: %v\n", z, z)
}

[링크 : https://go.dev/tour/basics/11]

 

변수형 앞에 []를 붙여 배열임을 나타내는데

var a [10]int

 

그냥 c언어의 일반적인 배열 문법과 거의 동일하다.

package main

import "fmt"

func main() {
var a [2]string
a[0] = "Hello"
a[1] = "World"
fmt.Println(a[0], a[1])
fmt.Println(a)

primes := [6]int{2, 3, 5, 7, 11, 13}
fmt.Println(primes)
}

[링크 : https://go.dev/tour/moretypes/6]

 

+

2022.04.07

상수는 타입을 붙여도 에러는 발생하지 않는다.

const Pi = 3.14

[링크 : https://go-tour-ko.appspot.com/basics/15]

'Programming > golang' 카테고리의 다른 글

golang 변수 할당문(짧은 변수 선언문) :=  (0) 2022.04.07
golang type 변환, type 확인하기  (0) 2022.04.07
go 모듈 불러오기  (0) 2022.04.06
golang 다른 파일 함수 불러오기  (0) 2022.04.04
liteide  (0) 2022.04.04
Posted by 구차니
Programming/golang2022. 4. 6. 10:50

아따 어렵다 -_- 다른 동료 도움을 받아서 해결

 

일단 아래의 기본 구조를 따라가고

serial.go와 tcp.go는 이름만 거창하지 그냥 fmt.Println("hello serial world") 출력하는 테스트 코드만 들어있다.

$ tree
.
├── go.mod
├── internal
│   └── util
│       ├── serial.go
│       └── tcp.go
├── main
├── main.go
├── pkg
│   └── mod
│       └── cache
│           └── lock
└── web
    ├── img
    ├── index.html
    └── style.css

7 directories, 8 files

 

go build 하면 에러가 발생하고

go mod init 프로젝트 명   으로 모듈을 초기화 해주고 나서 다시 빌드하면 문제없이 빌드된다.

go mod tidy는 먼지 조금더 찾아봐야 할 듯.

$ go build main.go
main.go:6:2: package l2s/internal/util is not in GOROOT (/usr/lib/go-1.17/src/l2s/internal/util)

$ go mod init test
go: creating new go.mod: module test
go: to add module requirements and sums:
        go mod tidy

$ go build main.go

 

go mod init 하면서 GOMOD 경로가 변경되는 듯.

$ go env | grep GOMOD
GOMODCACHE="/home/minimonk/pkg/mod"
GOMOD="/home/minimonk/src/l2s/go.mod"

 

테스트 해보니 현재 빌드 경로에서 벗어나면 GOMOD 값이 변경된다. 신기하네..

$ go env | grep GOMOD
GOMODCACHE="/home/minimonk/pkg/mod"
GOMOD="/dev/null"

 

함수명이 대문자로 시작해야 외부에서 호출 가능한... public 함수라고 해야하나?

go 키워드를 찾아봐야겠네.

 Go에서는 대문자로 된 변수명은 패키지 외부에서 사용 할 수 있다라는 기능적 의미를 가지고 있어서 사용자가 이해하기 쉬운 측면이 있다.

[링크 : https://blog.billo.io/devposts/golang_naming_convention/]

 

아래와 같은 디렉토리들로 기본 구성되고 src는 있어서는 안된다고 한다.

/cmd (메인을 여기에?) 
/internal (메인에서 호출한 사용자 작성 모듈들을 여기에?)
/pkg (외부 종속성 추가)
/vendor

/api
/web

/configs
/init
/scripts

[링크 : https://github.com/golang-standards/project-layout/blob/master/README_ko.md]

'Programming > golang' 카테고리의 다른 글

golang type 변환, type 확인하기  (0) 2022.04.07
go 변수, 상수, 배열  (0) 2022.04.06
golang 다른 파일 함수 불러오기  (0) 2022.04.04
liteide  (0) 2022.04.04
golang gore(repl), delve  (0) 2022.03.31
Posted by 구차니
Programming/golang2022. 4. 4. 19:06

c 언어에서 처럼 다른파일의 함수를 빌드해서 끌어오는 법 찾는 중

 

[링크 : https://stackoverflow.com/questions/26942150/importing-go-files-in-same-folder]

[링크 : https://linguinecode.com/post/how-to-import-local-files-packages-in-golang]

 

[링크 : https://surpassing.tistory.com/417]

'Programming > golang' 카테고리의 다른 글

go 변수, 상수, 배열  (0) 2022.04.06
go 모듈 불러오기  (0) 2022.04.06
liteide  (0) 2022.04.04
golang gore(repl), delve  (0) 2022.03.31
go build 옵션  (0) 2022.03.31
Posted by 구차니
Programming/golang2022. 4. 4. 14:56

ubuntu 18.04에 gqrx를 먼저 깔면서 qt5가 추가된 것 같긴한데

예전의 QT가 아닌지 빠릿빠릿하게 실행되는 느낌!

 

아무튼 golang 용 ide인데 api 조회가 쉬우면 좋겠네

[링크 : http://liteide.org/en/]

[링크 : https://streamls.tistory.com/54]

 

$ sudo snap install liteide-tpaw

[링크 : https://ubunlog.com/ko/go를위한-liteide-개발-환경/]

'Programming > golang' 카테고리의 다른 글

go 모듈 불러오기  (0) 2022.04.06
golang 다른 파일 함수 불러오기  (0) 2022.04.04
golang gore(repl), delve  (0) 2022.03.31
go build 옵션  (0) 2022.03.31
go lang static http server  (0) 2022.03.10
Posted by 구차니
Programming/golang2022. 3. 31. 23:52

node.js나 python 같은 인터프리트 언어가 대세라 그런가..

컴파일 언어를 인터프리트 언어 처럼 쓰게 해주는 환경이라니..

REPL(read-eval-print loop)

[링크 : https://github.com/x-motemen/gore]

[링크 : https://gorepl.com/]

[링크 : https://tkim.info/ko/devnote/d054-gore쓰다가-답답해서-tour-of-go-설치해서-쓴-썰/]

 

delve는 디버거 패키지.. 아니 툴이라고 해야하나?

[링크 : https://www.joinc.co.kr/w/man/12/golang/delve]

'Programming > golang' 카테고리의 다른 글

golang 다른 파일 함수 불러오기  (0) 2022.04.04
liteide  (0) 2022.04.04
go build 옵션  (0) 2022.03.31
go lang static http server  (0) 2022.03.10
go hello world build static / shared  (0) 2022.02.17
Posted by 구차니
Programming/golang2022. 3. 31. 19:05

gcc와 유사한 옵션들이군..

 

-o 옵션을 통해 실행파일 이름을 지정할 수 있는데, 지정하지 않을 경우 소스코드의 이름을 출력이름으로 지정한다.

go build [-o output] [build flags] [packages]

[링크 : https://pkg.go.dev/cmd/go]

 

 

$ go build -linkshared filename.go

옵션을 통해 빌드할때

open /usr/lib/go-1.17/pkg/linux_amd64_dynlink/archive/zip.shlibname: permission denied

권한이 부족해서 거부되었다는 에러가 발생하는데 대개는 sudo를 주고 하지만

왜 발생하나 궁금해서 찾아보니

dynlink에 파일들이 linkshared 옵션으로 빌드할때 날짜가 변경되는 것으로 보인다.

*.a 나 libstd.so 들 역시 변경되는걸 봐서는 linkshared로 빌드할때 해당 so도 같이 빌드 하는 듯.

[링크 : https://superuser.com/questions/739738/how-to-use-go-get-as-non-root]

 

dynlink 에서 GOROOT라는 변수가 보이길래 보는데 선언된건 없고..

$ cd $GOROOT/pkg/linux_amd64_dynlink
$ ls libstd.so
libstd.so

[링크 : https://www.codestudyblog.com/cs2112goa/1212131010.html]

 

도움말 보다보니 env라는 명령어 발견

$ go --help
Go is a tool for managing Go source code.

Usage:

        go <command> [arguments]

The commands are:

        bug         start a bug report
        build       compile packages and dependencies
        clean       remove object files and cached files
        doc         show documentation for package or symbol
        env         print Go environment information
        fix         update packages to use new APIs
        fmt         gofmt (reformat) package sources
        generate    generate Go files by processing source
        get         add dependencies to current module and install them
        install     compile and install packages and dependencies
        list        list packages or modules
        mod         module maintenance
        run         compile and run Go program
        test        test packages
        tool        run specified go tool
        version     print Go version
        vet         report likely mistakes in packages

Use "go help <command>" for more information about a command.

Additional help topics:

        buildconstraint build constraints
        buildmode       build modes
        c               calling between Go and C
        cache           build and test caching
        environment     environment variables
        filetype        file types
        go.mod          the go.mod file
        gopath          GOPATH environment variable
        gopath-get      legacy GOPATH go get
        goproxy         module proxy protocol
        importpath      import path syntax
        modules         modules, module versions, and more
        module-get      module-aware go get
        module-auth     module authentication using go.sum
        packages        package lists and patterns
        private         configuration for downloading non-public code
        testflag        testing flags
        testfunc        testing functions
        vcs             controlling version control with GOVCS

Use "go help <topic>" for more information about that topic.

 

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/minimonk/.cache/go-build"
GOENV="/home/minimonk/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/minimonk/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/minimonk/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go-1.17"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.17/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.17.8"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1772520358=/tmp/go-build -gno-record-gcc-switches"

 

저 놈의 GOTOOLDIR을 바꾸어 주면 되려나?

 

GOOS와 GOARCH를 이용해서 크로스컴파일 가능하다고 한다.

$ env GOOS=windows GOARCH=amd64 go build source.go

[링크 : https://www.digitalocean.com/community/tutorials/how-to-build-go-executables-for-multiple-platforms-on-ubuntu-16-04]

 

이게 되네..

$ GOARCH=arm go build hello.go
$ file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped

$ GOARCH=arm64 go build hello.go
$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, not stripped

 

'Programming > golang' 카테고리의 다른 글

liteide  (0) 2022.04.04
golang gore(repl), delve  (0) 2022.03.31
go lang static http server  (0) 2022.03.10
go hello world build static / shared  (0) 2022.02.17
go lang rest  (0) 2022.02.11
Posted by 구차니
Programming/golang2022. 3. 10. 19:09

의외로 무지 단순하게 추가가 가능.

아무튼 경로가 겹치지만 않으면 REST API랑 같이 가능하지 않을까 싶은데

이 경우에는 누가 우선순위를 가질지

먼저 등록된 쪽이려나 아니면 별도의 REST로 등록한 쪽이 우선이려나?

 

package main
 
import (
    "net/http"
)
 
func main() {   
    http.Handle("/", http.FileServer(http.Dir("wwwroot")))
    http.ListenAndServe(":5000", nil)
}

[링크 : http://golang.site/go/article/111-간단한-웹-서버-HTTP-서버]

'Programming > golang' 카테고리의 다른 글

golang gore(repl), delve  (0) 2022.03.31
go build 옵션  (0) 2022.03.31
go hello world build static / shared  (0) 2022.02.17
go lang rest  (0) 2022.02.11
golang  (0) 2020.05.18
Posted by 구차니