Herramientas de usuario

Herramientas del sitio


wiki2:go_useful

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
wiki2:go_useful [2019/08/20 10:48]
alfred [Program]
wiki2:go_useful [2020/05/09 09:25] (actual)
Línea 19: Línea 19:
  
  
-==== dep tool for managing dependences ====+==== go mod for managing dependences ==== 
 +After Go 1.11. 
 +<​code>​ 
 +go mod init <project name> 
 +# Do not do it in the GOPATH 
 +</​code>​ 
 + 
 +When you do ''​go build''​ it downloads dependencies automatically. 
 + 
 +There will appear ''​go.mod''​ y ''​go.sum''​ files. The first one to list dependences,​ the second one the checksums. 
 + 
 +<​code>​ 
 +go mod tidy      # To remove non-used libraries 
 +go mod vendor ​   # To vendor dependencies in vendor directory. 
 +</​code>​ 
 + 
 +Then, if you added a new package to your project, to use them: 
 +<​code>​ 
 +import "​project/​package"​ 
 +</​code>​ 
 +==== dep tool for managing dependences ​(DEPRECATED) ​====
  
 To install: ''​apt install go-dep''​. To initialize a project: To install: ''​apt install go-dep''​. To initialize a project:
Línea 101: Línea 121:
 ====== Gotchas ====== ====== Gotchas ======
  
 +===== Basic =====
 +<​code>​
 +// Define a string array variable
 +var (
 +   ​viewNames ​      = []string{"​projects",​ "​generations",​ "​info",​ "​menu"​}
 +)
 +
 +
 +// Loop over an slice
 +for _, v := range viewNames {
 +  fmt.Println(v)
 +}
 +
 +// Get a variable without using it
 +_, err := g.SetCurrentView(name)
 +</​code>​
 +===== Conversions =====
 +Previous code:
 +<​code>​
 +import "​strconv"​
 +</​code>​
 +Code
 +<​code>​
 +// String to byte[]
 +buff := []byte("​Here is a string...."​)
 +
 +// Byte to String
 +str := string(buff)
 +
 +// Int to string
 +str := strconv.Itoa(currentNumber)
 +</​code>​
 ===== Program ===== ===== Program =====
 Previous code used: Previous code used:
Línea 109: Línea 161:
 <​code>​ <​code>​
 argumentsWithoutProgramName = os.Args[1:] argumentsWithoutProgramName = os.Args[1:]
 +settings_path = os.Getenv("​GLOUDVIEWER_CONFIG"​)
 </​code>​ </​code>​
  
Línea 117: Línea 170:
 </​code>​ </​code>​
  
 +
 +===== Maps =====
 +
 +<​code>​
 +var m map[string]Vertex
 +m = make(map[string]Vertex)
 +m["​Bell Labs"] = Vertex{40.68433,​ -74.39967}
 +</​code>​
 +<​code>​
 +keys := make([]keyType,​ 0, len(myMap))
 +values := make([]valueType,​ 0, len(myMap))
 +for k, v := range myMap {
 + keys = append(keys,​ k)
 + values = append(values,​ v)
 +}
 +</​code>​
 ===== Go Routines ===== ===== Go Routines =====
 Previous code used: Previous code used:
Línea 135: Línea 204:
    ​fmt.Println(msg)    ​fmt.Println(msg)
 }("​going"​) }("​going"​)
 +</​code>​
 +
 +===== Not so common types =====
 +Previous code:
 +<​code>​
 +import "​bytes"​
 +</​code>​
 +
 +Code:
 +<​code>​
 +// String buffer
 +buf := bytes.NewBufferString(""​)
 +fmt.Fprintln(buf,​ "​Hello!"​)
 +str := buf.String()
 +</​code>​
 +
 +===== JSON =====
 +Previous code used:
 +<​code>​
 +import "​io/​ioutil"​
 +import "​encoding/​json"​
 +
 +type Generation struct {
 + Project ​        ​string
 + Author ​         string `json:"​author"​`
 + Version ​        ​string `json:"​version"​`
 +}
 +</​code>​
 +Code:
 +<​code>​
 +// JSON file to struct object
 +b, err := ioutil.ReadFile(path)
 +if err != nil {
 +   ​panic(err)
 +}
 +generation := Generation{}
 +json.Unmarshal(b,​ &​generation)
 +</​code>​
 +
 +===== Filesystem =====
 +Previous code:
 +<​code>​
 +import "​strings"​
 +import "​path"​
 +import "​path/​filepath"​
 +</​code>​
 +
 +Code:
 +<​code>​
 +// info is info os.FileInfo type
 +
 +// Is a directory:
 +info.IsDir()
 +
 +// Get parent path from a path (pth)
 +filepath.Dir(pth)
 +
 +// File name without extension:
 +strings.TrimSuffix(info.Name(),​ pth.Ext(info.Name())
 +
 +// Join path
 +path.Join(arguments[0],​ selectedProject)
 +</​code>​
 +
 +====== Snippets ======
 +===== Map, reduce, filter in Go =====
 +
 +<​code>​
 +func mapXtoY(collection []X, fn func(elem X) Y) []Y {
 + var result []Y
 + for _, item := range collection {
 + result = append(result,​ fn(item))
 + }
 + return result
 +}
 +
 +func reduceXtoY(collection []X, init Y, fn func(memo Y, elem X) Y) Y {
 + result := init
 + for _, item := range collection {
 + result = fn(result, item)
 + }
 + return result
 +}
 +
 +func filterXs(collection []X, fn func(elem X) bool) []X {
 + var result []X
 + for _, item := range collection {
 + if fn(item) {
 + result = append(result,​ item)
 + }
 + }
 + return result
 +}
 +</​code>​
 +
 +===== Nested functions =====
 +<​code>​
 +func f() {
 +    foo := func(s string) {
 +        fmt.Println(s)
 +    }
 +
 +    foo("​Hello World!"​)
 +}
 </​code>​ </​code>​
  
wiki2/go_useful.1566298134.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)