728x90

go lang에서 go.mod 파일에서

indirect 는 go.mod에는 추가되었으나 소스코드 상에서 사용하지 않는 module

+incompatible 로 표시되는 경우
revision에 tag는 만들어져 있지만 root directory에 go.mod파일이 없는 경우, 즉 module 제작자가 go module로 선언하지 않았을 때 붙는 꼬릿말(suffix)이라고 하네

개발자가 이게 모듈이라고 처리해야 해결되는 것임.

참조 :

https://blog.puppyloper.com/menus/Golang/articles/Golang%EC%9D%98%20module%20system

 

Puppyloper's Blog

 

blog.puppyloper.com

 

728x90
728x90

우선. Jetbrains 라이센스는 우리나라의 단군넷에서도 구매가 가능하다.(단군넷 회원가입 필요)
하지만 결국에는 jetbrains 홈페이지에도 따로 가입을 해야한다...
(참고로 10개정도 되어야 할인이 된다고 ...)

단군넷으로 결제를 하게되면 메일로 인증관련 메일이 온다.
링크를 타고 들어가서 가입하면 해당 계정이 마스터가 된다.

Jetbrains에서 가입하고 결제를 하면 해당 계정이 마스터가 된다.

결제가 완료되면 로그인했을 때 구매한 라이센스 정보를 보여준다.
구매한 게 "All Products Pack"에 4개를 구매 했다면 아래와 같이 나타난다.

"Active subscriptions"를 클릭하면 상세 목록이 나온다.

중간에 초대링크가 있으며
목록에는 LicensesID, Assigned여부, 만료일, 제품링크, 팀ID, Assign링크가 나타난다.
제품링크를 통해 가능한 제품을 바로 다운받을 수 있다.(어차피 인증은 나중이므로 여기에서 다운받지 않고 홈페이지의 다운로드 링크를 받아도 된다)

사용자를 할당하려면 오른쪽 끝의 Assign을 클릭한다.

링크를 보낼 Email주소와 이름을 입력하고 "Assign"버튼을 누르면 초대메일이 간다.
각 라이센스 ID별로 assing 하면 된다.

아래와 같이 메일에 파란색으로 "complete JetBrans Account registration" 링크가 있다.
클릭하여 완료하고 
해당 메일계정으로 JetBrains에 가입이 안되어 있으면 가입해야 한다.

가입이 완료되면 
제품을 다운로드 받은 뒤, 인증에서 jb account(email / password) 로  activate하면 된다.

help > register...

 

 

728x90
728x90

javascript에서

1. cookie로

document.cookie = "cookieuser=cookieus;bb=cc";

2. localstorage로

localStorage.LLL = "ABCD";

두 가지로 set을 했을 때
go lang의 echo에서 받는 법

func CallLoginInfo(c echo.Context){

tkcookeierr := c.Request().Cookie("cookieuser")
    if cookeierr != nil {
        fmt.Println(cookeierr)
    }
    tokenStr := tk.Value
    fmt.Println(tokenStr)
}

result2ook := store.Get("LLL")
    if !ook {
        fmt.Println("store.Get LLL")
    }
    fmt.Println(result2)

728x90
728x90

1. wsl2 에는 그런문제가 없다고 한다. wsl1이면 wsl2를 새로 설치한다.

2. npm으로 해서 오류나면 yarn으로 해 본다.

3. vs code 의 file > setting 에 fileWatcher 가 체크되어야 한다. 안되어 있으면 체크 할 것.

 

이유없이 프로젝트 생성하는데
EACCES: permission denied, rename  diffie-hellman

sudo로 해도 오류나고 아무리 해도 안됐는데...
정안되면 재부팅..

fileWatcher 설정하고 yarn 으로 해보니 됨. 그뒤에 npm으로 해보니 됨.
뭐가 문제였는지는 결국... 모름.

728x90
728x90

apt install nodejs
(또는 sudo apt install nodejs ) 

apt install npm
(또는 sudo apt install npm )

npm install vue
(또는 sudo npm install vue )

npm install -g @vue/cli
(또는 sudo npm install -g @vue/cli )

---
Command 'vue' not found xx 라는 메시지가 나오면
npm list vue 를 해본다. --> vue 정보가 나오면 설치는 된 것임
vue -v 를 해본다 

npm install -g @vue/cli 를 했을 때 아래와 같은 에러가 나면
npm ERR! path /usr/local/lib/node_modules/@vue/cli

sudo npm install -g @vue/cli 으로 다시 설치를 해 본다.

vue -V 에서(대문자 V임) 버전정보가 나오면 됨.

----------

설치 끝

프로젝트 생성

vue create aaa

하면 preset을 고르라고 하는데
Default 2를 골랐다.(Default 3이 있는데 아직 잘 안되는듯).모르면 그냥 엔터. ㅋ

 성공했다고 하면 실행 명령이 나옴
cd aaa
npm run serve

접속경로가 나타나며 서버가동 됨.

----------
이후는 아래 사이트 참조 함.

참고 : adeshg7.medium.com/vuejs-golang-a-rare-combination-53538b6fb918

github.com/adesgautam/Calculator

 

Vuejs + Golang = A rare combination

Back in 2018, I wrote an article “Django + Angular 4 = A powerful web application” which has over 15k reads. Out of curiosity, I tried…

adeshg7.medium.com

npm install --save axios bootstrap-vue bootstrap-vue/dist/bootstrap-vue.css bootstrap/dist/css/bootstrap.min.css vee-validate;

npm install --save bootstrap-vue bootstrap axios vee-validate
bootstrap-vue.css

728x90
728x90

vue_without_cli.zip
0.00MB

cli 설치하지 않고 기존 프로젝트에 script 파일만으로 동작

1. login 화면이므로 뒷단인 /loginproc는 구현해야 함.

2. go lang에서 사용을 위해 기본 delimiter인 {{ }} 를 [[ ]] 으로 변경 함.
화면에서 {{ abc }} 로 출력하려고할 때 go에서 먼저 abc라는 변수를 찾음
그래서 분리가 필요하여 Vue에서 사용하는 delimiter를 변경함

go에서는 {{ abc }}, vue에서는 [[ abc ]] 로 쓰면 됨.
각 vue component에 delimeters : ['[[', ']]'] 를 추가

3. component에서 binding 할 변수 형태 주의
(1) data : { pataTitle }

(2) data : function(){ return { pageTitle : "타이틀" } }

 - new Vue 에서는 (1)의 형태가 동작함
 - Vue.component 에서는 (2)의 형태가 동작함

4. 정의한 component 불러오기
cli가 설치된 경우 xxx.vue 파일이면 한방에 되지만 없이 하는 것이므로 import 구문이 먹지 않는다.
그래서 script 태그에 component 파일 위치를 추가한 다음
new View 의 components 안에 사용할 태그명 :  component 변수 명을 쓴다.

ex) var componentlogin = Vue.component("login", ...)

var app = new Vue({ ... , components : { 'login', componentlogin } })


5. html 태그의 경우 굳이 script 내에 template으로 추가할 필요가 있는지 검토할 것
왜냐하면 go lang의 경우 자체 template 기능이 있어 화면을 분할하여 html 태그가 정의 됨.
다시 script로 lendering할 필요가 굳이 있는가?

특정 요건( html + script)인 경우에는 template로 뺴고
아닌 경우에는 script 에 function으로 제어해도 될 듯.

-----

첨부된 파일 참조할 것.

728x90
728x90

기존 프로젝트에 Vue.js 를 적용하기 위한 방법이다.
.vue 파일로 되는지는 아직 안해보고
성공한 것까지

my-component.js
0.00MB

/views/index.html

/static/assets/js/vuecommon.js

/static/assets/js/components/my-component.js

component들을 먼저 선언아고 new Vue 는 가장 마지막에 선언한다.
vuecommon.js 안에 var child가 정의되어있으나 사용하지 않는데
components로 주석해 놓은부분 풀려 사용가능.

index.html
0.00MB
vuecommon.js
0.00MB

 

완전한 예제는 다음 링크 참조

github.com/sobpilot/vuespa/tree/master/src

 

sobpilot/vuespa

A SPA Vuejs Application with Vuejs Router without WebPack or Node. - sobpilot/vuespa

github.com

 

728x90
728x90

index.html 추가할 내용


 

script 파일 경로

vuecommon.js 에 들어갈 내용

var app = new Vue({
  el: '#app',
  delimiters: ['[[', ']]'],
  data: { // 상태 message: '안녕하세요 Vue!', liked: false, },
  template: ` // 뷰
      [[ message ]]

  `,
  methods: {
      // 액션
      onClickButton() { this.liked = true; }
  }
})

Vue.component('my-component', { template: '[[ message ]]', data: { message: 'hello' } })

728x90
728x90

can't load package: import cycle not allowed 오류는

go 에서 동일한 package인 경우에는 import 필요없이 바로 해당 method를 호출 할 수 있다.

따라서 import 구문에 해당 package가 있는 경우에 나타난다.

dbHander.go 파일에 Put(name, value string) 이 정의되어 있고
같은 폴더에 user.go 파일이 있어을 때

user.go 에서
import ( db "abc/databases" ) 로 정의한 뒤에 
db.Put("aaa", "bbb") 를 쓰면 안된다는 얘기다.

그냥 import, alias 없이 바로 PUT("aaa", "bbb") 를 쓰면 된다.

또한
databases/dbHandler.go 가 있고
databases/store/user.go 가 있는 경우에는 같은 폴더에 있지 않으므로

import 구문을 써서 사용한다.

728x90

Nutsdb with golang

2021. 2. 9. 09:03
728x90

Go lang에서 Nuts라는 key-pair 방식의 db를 쓸 때가 있다.
참고 : https://github.com/xujiajun/nutsdb#getting-started

1. 다운받기

go get -u github.com/xujiajun/nutsdb

이 때 
package golang.org/x/sys/unix: golang.org/x/sys is a custom import path for https://go.googlesource.com/sys, but /home/ubuntu/go/src/golang.org/x/sys is checked out from https://github.com/golang/sys.git

위와 같은 메세지가 나타날 수 있는데

package의 출처가 다르다는 메세지다.

각각의 폴더에 들어가서 파일들이 제대로 들어가 있으면 문제 없는 듯.
cd src/github.com/xujiajun/netsdb 
cd src/golang.org/x/sys

github의 example 아래 basic/main.go 를 참고하여
(https://github.com/xujiajun/nutsdb/tree/master/examples/basic)
NutsDbHndler.go 를 만듬. package는 databases
참고1 : init() method는 인자가 없는 func로 생성하면 자동으로 처리 됨. 따로 호출할 필요 없음.
참고2 : nuts db의 method 선언 형태는 if err := func(); err != nil {     } 형태임
  err := func();
  if err != nil {}
위 형태의 변형임.
참고3 : fileDir 은 현재경로 기준으로 하려면 "./aaa" 등으로 하고
그 외에는 절대 경로임
참고4 : init() 함수 내에 os.RemoveAll 이 있으므로 자칫하면 해당 폴더의 Data가 모두 지워질 수 있으므로 "./data" 등의 해당 db파일만 저장되는 경로를 따로 마련할 것.

databases/NutsDbHandler.go

package databases

import (
    "fmt"
    "io/ioutil"
    "log"
    "os"

    "github.com/xujiajun/nutsdb"
)

var (
    db     *nutsdb.DB
    bucket string
)

func init() {
    log.Println("NutsDbHandler init start")
    opt := nutsdb.DefaultOptions
    fileDir := "./databases"

    files_ := ioutil.ReadDir(fileDir)
    for _f := range files {
        name := f.Name()
        if name != "" {
            fmt.Println(fileDir + "/" + name)
            err := os.RemoveAll(fileDir + "/" + name)
            if err != nil {
                panic(err)
            }
        }
    }
    opt.Dir = fileDir
    opt.SegmentSize = 1024 * 1024 // 1MB
    db_ = nutsdb.Open(opt)
    bucket = "bucket"
    log.Println("NutsDbHandler init end")
}

func delete(keyName string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            return tx.Delete(bucket, key)
        }); err != nil {
        log.Fatal(err)
    }
}

func put(keyName, keyValue string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            val := []byte(keyValue)
            return tx.Put(bucket, key, val, 0)
        }); err != nil {
        log.Fatal(err)
    }
}

func put2(keyName, keyValue string) {
    if err := db.Update(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            val := []byte(keyValue)
            return tx.Put(bucket, key, val, 0)
        }); err != nil {
        log.Fatal(err)
    }
}

func read(keyName string) {
    if err := db.View(
        func(tx *nutsdb.Tx) error {
            key := []byte(keyName)
            eerr := tx.Get(bucket, key)
            if err != nil {
                return err
            }
            fmt.Println("val:"string(e.Value))
            return nil
        }); err != nil {
        log.Println(err)
    }
}

// 사용방법 ex
// import( db "src/databases")

// func main() {
//  //insert
//  db.put("name1", "value1")

//  //read
//  db.read("name1")

//  //delete
//  db.delete("name1")

//  //read
//  db.read("name1")

//  //insert
//  db.put("name1", "value1")

//  //read
//  db.read("name1")

//  //update
//  db.put2("name1", "value2")

//  //read
//  db.read("name1")

// }

 

 

 

728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1951)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (179)
난 그래 (159)
Study (290)
Cloud (26)
Go lang (30)
Front-end (27)
Device (3)
MAC (1)
Spring framework (49)
Java (13)
English (39)
SOA (0)
Idioms (7)
모르는거 (5)
WriteEnglish (10)
Android (56)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :