1
1
// go mod init main
2
2
// go run example.go
3
3
package main
4
+
4
5
import (
5
6
"fmt"
6
- "github.com/neo4j/neo4j-go-driver/neo4j" //Go 1.8
7
+ "github.com/neo4j/neo4j-go-driver/v4/neo4j"
8
+ "io"
9
+ "reflect"
7
10
)
11
+
8
12
func main () {
9
- s , err := runQuery ("bolt://<HOST>:<BOLTPORT>" , "<USERNAME>" , "<PASSWORD>" )
13
+ results , err := runQuery ("bolt://<HOST>:<BOLTPORT>" , "neo4j " , "<USERNAME>" , "<PASSWORD>" )
10
14
if err != nil {
11
15
panic (err )
12
16
}
13
- fmt .Println (s )
14
- }
15
- func runQuery (uri , username , password string ) ([]string , error ) {
16
- configForNeo4j4 := func (conf * neo4j.Config ) { conf .Encrypted = false }
17
- driver , err := neo4j .NewDriver (uri , neo4j .BasicAuth (username , password , "" ), configForNeo4j4 )
18
- if err != nil {
19
- return nil , err
17
+ for _ , result := range results {
18
+ fmt .Println (result )
20
19
}
21
- defer driver .Close ()
22
- sessionConfig := neo4j.SessionConfig {AccessMode : neo4j .AccessModeRead , DatabaseName : "neo4j" }
23
- session , err := driver .NewSession (sessionConfig )
20
+ }
21
+
22
+ func runQuery (uri , database , username , password string ) (result []string , err error ) {
23
+ driver , err := neo4j .NewDriver (uri , neo4j .BasicAuth (username , password , "" ))
24
24
if err != nil {
25
25
return nil , err
26
26
}
27
- defer session .Close ()
27
+ defer func () {err = handleClose (driver , err )}()
28
+ session := driver .NewSession (neo4j.SessionConfig {AccessMode : neo4j .AccessModeRead , DatabaseName : database })
29
+ defer func () {err = handleClose (session , err )}()
28
30
results , err := session .ReadTransaction (func (transaction neo4j.Transaction ) (interface {}, error ) {
29
31
result , err := transaction .Run (
30
32
`
@@ -40,7 +42,7 @@ func runQuery(uri, username, password string) ([]string, error) {
40
42
for result .Next () {
41
43
value , found := result .Record ().Get ("person" )
42
44
if found {
43
- arr = append (arr , value .(string ))
45
+ arr = append (arr , value .(string ))
44
46
}
45
47
}
46
48
if err = result .Err (); err != nil {
@@ -51,5 +53,17 @@ func runQuery(uri, username, password string) ([]string, error) {
51
53
if err != nil {
52
54
return nil , err
53
55
}
54
- return results .([]string ), err
55
- }
56
+ result = results .([]string )
57
+ return result , err
58
+ }
59
+
60
+ func handleClose (closer io.Closer , previousError error ) error {
61
+ err := closer .Close ()
62
+ if err == nil {
63
+ return previousError
64
+ }
65
+ if previousError == nil {
66
+ return err
67
+ }
68
+ return fmt .Errorf ("%v closure error occurred:\n %s\n initial error was:\n %w" , reflect .TypeOf (closer ), err .Error (), previousError )
69
+ }
0 commit comments