*I have two Golang questions that I hope someone could help me out with.*


*1) Am I misunderstanding Golang maps?*


*I'm trying to translate a project from PHP to Golang for the websockets 
and the concurrency. *


*However, I can't do this.....*


*          var MyArray [string]string*


*Instead, I have to do this.....*


*          var MyMap map[string]string*


*However, since the same array (map) would be used at least once for each 
call to the Golang code from the Front End, which occurs any time a user 
sends data to the Back End, I have been led to believe that I would have to 
lock and unlock the map for each use. Wouldn't that essentially break 
concurrency (or at least eliminate its benefits??? No other user's function 
could use this map until the current user's function is done with it. I'd 
be back to "single threaded" again (concurrently speaking). This would 
defeat much of the point in my switching the project from PHP to Golang. To 
maintain concurrency without blocking other users, one would have to avoid 
using maps. Arrays (maps) are central to programming. How does anyone get 
by in Golang without using Maps?????*


*For example, if I do the following.....*


*func MyFunc (whatever) *map[string]string *{*


     var MyMap map[string]string


*     // Do something with the map*


*     return MyMap*


*}*


*func CallingFunction (whatever) {*


*     MyReturnedMap := go  MyFunc(whatever)*


*}*


*.....would I have to lock and unlock the map or are two separate instances 
of the map declared?*


*Again, am** I misunderstanding Golang maps?*


*2) Also, how would one build a multidimensional array with a string index 
(or even a map of maps) for something like a large file directory where the 
number of files, folders and levels are unknown at the outset (without 
repeatedly using the append function that apparently uses memory on an 
exponential scale of 2^x)? I've figured out how to do 
map[string]map[string]map[string]string, but one would have to know how 
many levels there would be, in advance, to be able to use something like 
that. Also, when I've tried that, I can't put a string on any level except 
for the last one, since the only data type that any level other than the 
last one will accept is another map! What if the map turns out to be only 
three levels deep for one path and five levels deep for another path?** I've 
tried the following, which I found online, but I can't dynamically add any 
new folders to the directory with any kind of ease. It seems that 
initializing the struct is the only way to get data into the struct without 
declaring a new struct for every manipulation!*


*(Below code from *
*http://stackoverflow.com/questions/19080116/golang-tree-like-solution-for-filesystem)*


package Websocket

import "fmt"

type File struct {
       Name string
}

type Folder struct {
       Name    string
       Files   []File
       Folders []Folder
}

func main() {
       root := Folder{
              Name: "Root",
              Files: []File{
                     {"One"},
                     {"Two"},
              },
              Folders: []Folder{
                     {
                            Name: "Empty",
                     },
              },
       }
       fmt.Printf("Root %#v\n", root)
}


*Given the above, how would i now add another folder to the directory tree. 
Among many other variations, I've tried the following.....*


*root.Folders[0].Name = "MyFirstFolder"*


*.....but nothing I have tried has worked.*


*What I've been trying to do is set up an array that looks like the 
following.....*


*MyArray["Number of Sub Items"] = 6*

*MyArray["Type of Sub Items"] = "Folders"*

*MyArray[0] = "Folder 1"*

*MyArray[1]** = "Folder 2"*

*MyArray[2]** = "Folder 3"*

*MyArray[3]** = "Folder 4"*

*MyArray[4]** = "Folder 5"*

*MyArray[6]** = "Folder 6"*


*MyArray[3]**["Number of Sub Items"]** = 3*

*MyArray["Type of Sub Items"] = "Folders"*

*MyArray[3][0] = "Folder 1"*

*MyArray[3][1]** = "Folder 2"*

*MyArray[3][2]** = "Folder 3"*


*Note that this problem is not exclusive to directory structure. Using 
directory structure is just a simple way to describe the problem I'm having.*


*Alternatively**, are there any libraries that can do the above so that I don't 
have to "reinvent the wheel"?*


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to