In Go, I was trying simple database connection. I need to import gorilla/mux
, but I couldn't.
I am using VS Code. After cd
ing to my project directory, I created main.go
and did run
go get -u github.com/gorilla/mux
Here is main.go
package main
import (
"database/sql"
"fmt"
"github.com/gorilla/mux"
_ "github.com/lib/pq"
)
const (
host = "localhost"
port = 3000
user = "postgres"
password = "postgres"
dbname = "test1"
)
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
}
[Note that, after executing go get -u github.com/gorilla/mux
terminal shows
C:\Go\src\github.com\IamFrost\go-rest-api>go get -v -u github.com/gorilla/mux
go: golang.org/x/text upgrade => v0.3.2
go: golang.org/x/crypto upgrade => v0.0.0-20200429183012-4b2356b1ed79
go: golang.org/x/sys upgrade => v0.0.0-20200430082407-1f5687305801
go: golang.org/x/net upgrade => v0.0.0-20200425230154-ff2c4b7c35a0
go: downloading golang.org/x/sys v0.0.0-20200430082407-1f5687305801
golang.org/x/sys/cpu
golang.org/x/crypto/chacha20poly1305
crypto/tls
]
Look i have no other syntax error in mini map. At red mark, when I put mouse, the hover text, its funny to me:
1)imported but not used
but the next line
2)no package for import github.com/gorilla/mux
)
lol didn't that go against 1) ?
Someone please explain why that occurs
However,
After using go build
in terminal
Here is terminal:
C:\Go\src\github.com\IamFrost\go-rest-api>go build
go: inconsistent vendoring in C:\Go\src:
github.com/gorilla/mux@v1.7.4: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
github.com/lib/pq@v1.4.0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/crypto@v0.0.0-20200429183012-4b2356b1ed79: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/net@v0.0.0-20200425230154-ff2c4b7c35a0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/sys@v0.0.0-20200430082407-1f5687305801: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/crypto@v0.0.0-20200128174031-69ecbb4d6d5d: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
golang.org/x/net@v0.0.0-20191126235420-ef20fe5d7933: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
golang.org/x/sys@v0.0.0-20200201011859-915c9c3d4ccf: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
run 'go mod vendor' to sync, or use -mod=mod or -mod=readonly to ignore the vendor directory
[Note : I did 'go mod vendor' also, but no change]
So someone point me why I can't import gorilla/mux
or pq
.
What else I have to do?
(and please explain what does that mean? is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
)
I don't know why it works (I am beginner). I found something in net, somehow it worked . Here is how :
This is my go directory C:\Go\
. But I create the project in my desktop folder
Then I recreated the project under C:\Go\src
(this is exact folder
C:\Go\src\github.com\[github_username]\[project_name]
)
Then I pasted all the code at main.go
Finally from terminal go mod vendor
Then go build
Then go run main.go
Finally it worked
[I would like to know why it worked. I would really appreciate your comment : about why they are forcing me to go under C:\Go\src
. I already have GOPATH C:\Go\
, GOBIN C:\Go\bin
set in environment variable]