Introducción a GO Carlos Zúñiga
¿Porqué Go? <ul><li>Frustración con lenguajes de sistemas actuales </li><ul><li>Elegir entre compilación eficiente, ejecuc...
Aprovechar procesadores multinúcleo
Mejorar el soporte de concurrencia </li></ul>
Características <ul><li>Compilación rápida
Se siente como un lenguaje dinámico
Colector de basura y concurrencia
No es un lenguaje orientado a objetos convencional </li></ul>
Instalación <ul><li>hg clone -u release https://go.googlecode.com/hg/ go
cd go/src
./all.bash </li></ul><ul><li>Añadir go/bin al $PATH </li></ul><ul><li>apt-get install golang </li></ul>
Ejecución <ul><li>Compilador gc </li><ul><li>6g  para amd64,  8g  para 386 </li></ul></ul><ul><ul><ul><li>6g programa.go
6l -o programa programa.6
./programa </li></ul></ul></ul><ul><ul><li>Rápido, genera código OK. </li></ul><li>Compilador  gccgo </li></ul><ul><ul><ul...
Hello World <ul>package main import &quot;fmt&quot; func main() { world := &quot; 世界 &quot; fmt.Println(&quot;Hello,&quot;...
Lenguaje <ul><li>Tipos básicos </li><ul><li>bool
string
int  int8  int16  int32  int64
uint  uint8(byte)  uint16  uint32  uint64  uintptr
float32  float64
complex64  complex128 </li></ul></ul>
Lenguaje <ul><li>Variables y tipo a la inversa de C (int a;) </li><ul><li>var a int
var b, c int
var d []int
Upcoming SlideShare
Loading in...5
×

Introduccion a go

480
-1

Published on

Presentación para las reuniones del AQPGLUG

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
480
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introduccion a go

  1. 1. Introducción a GO Carlos Zúñiga
  2. 2. ¿Porqué Go? <ul><li>Frustración con lenguajes de sistemas actuales </li><ul><li>Elegir entre compilación eficiente, ejecución eficiente o facilidad de programación </li></ul><li>Compiladores lentos
  3. 3. Aprovechar procesadores multinúcleo
  4. 4. Mejorar el soporte de concurrencia </li></ul>
  5. 5. Características <ul><li>Compilación rápida
  6. 6. Se siente como un lenguaje dinámico
  7. 7. Colector de basura y concurrencia
  8. 8. No es un lenguaje orientado a objetos convencional </li></ul>
  9. 9. Instalación <ul><li>hg clone -u release https://go.googlecode.com/hg/ go
  10. 10. cd go/src
  11. 11. ./all.bash </li></ul><ul><li>Añadir go/bin al $PATH </li></ul><ul><li>apt-get install golang </li></ul>
  12. 12. Ejecución <ul><li>Compilador gc </li><ul><li>6g para amd64, 8g para 386 </li></ul></ul><ul><ul><ul><li>6g programa.go
  13. 13. 6l -o programa programa.6
  14. 14. ./programa </li></ul></ul></ul><ul><ul><li>Rápido, genera código OK. </li></ul><li>Compilador gccgo </li></ul><ul><ul><ul><li>gccgo -o programa programa.go </li></ul></ul></ul><ul><ul><li>Código bueno pero no tan rápido. </li></ul></ul>
  15. 15. Hello World <ul>package main import &quot;fmt&quot; func main() { world := &quot; 世界 &quot; fmt.Println(&quot;Hello,&quot;, world) } </ul>
  16. 16. Lenguaje <ul><li>Tipos básicos </li><ul><li>bool
  17. 17. string
  18. 18. int int8 int16 int32 int64
  19. 19. uint uint8(byte) uint16 uint32 uint64 uintptr
  20. 20. float32 float64
  21. 21. complex64 complex128 </li></ul></ul>
  22. 22. Lenguaje <ul><li>Variables y tipo a la inversa de C (int a;) </li><ul><li>var a int
  23. 23. var b, c int
  24. 24. var d []int
  25. 25. var {
  26. 26. e, f = 5, &quot;hola&quot;
  27. 27. g int
  28. 28. }
  29. 29. i := 10 //solo dentro de funciones </li></ul></ul>
  30. 30. Lenguaje <ul><li>Struct </li><ul><li>type S struct {
  31. 31. x int
  32. 32. y string
  33. 33. } </li></ul></ul>
  34. 34. Lenguaje <ul><li>If </li><ul><li>No lleva paréntesis, pero las llaves son obligatorias
  35. 35. if a := algo() ; a == b {
  36. 36. return true
  37. 37. } else {
  38. 38. return false
  39. 39. } </li></ul></ul>
  40. 40. Lenguaje <ul><li>For </li><ul><li>sum := 0
  41. 41. for i := 0 ; i < 10 ; i++ {
  42. 42. sum += i
  43. 43. }
  44. 44. for i != 10 {
  45. 45. i++
  46. 46. } </li></ul></ul>
  47. 47. Lenguaje <ul><li>Switch </li><ul><li>switch a := algo() ; true {
  48. 48. case a < 0 : panic(&quot;valor < 0&quot;)
  49. 49. case a == 0 :
  50. 50. return 0
  51. 51. case a == 1 :
  52. 52. a *= 100; fallthrough
  53. 53. case a > 1 :
  54. 54. return a *= v
  55. 55. } </li></ul></ul>
  56. 56. Lenguaje <ul><li>Slices </li><ul><li>p := []int{2, 3, 5, 7, 11, 13}
  57. 57. q := p[ 1:4 ] // {3, 5, 7}
  58. 58. for i := 0; i < len(p); i++ {
  59. 59. fmt.Printf(&quot;p[%d] == %dn&quot;, i, p[i])
  60. 60. }
  61. 61. for i, v := range p {
  62. 62. fmt.Printf(&quot;p[%d] == %dn&quot;, i, v)
  63. 63. } </li></ul></ul>
  64. 64. Lenguaje <ul><li>Funciones </li><ul><li>func add(x, y int) int {
  65. 65. return x + y
  66. 66. }
  67. 67. func swap(x, y string) (string, string) {
  68. 68. return y, x
  69. 69. } </li></ul></ul>
  70. 70. Lenguaje <ul><li>Interfaces </li><ul><li>import &quot;math&quot;
  71. 71. type Vertex struct {
  72. 72. X, Y float64
  73. 73. }
  74. 74. func (p *Vertex) Abs() float64 {
  75. 75. return math.Sqrt(p.X*p.X + p.Y*p.Y)
  76. 76. } </li></ul></ul>
  77. 77. Lenguaje <ul><li>Interfaces </li><ul><li>type Writer interface {
  78. 78. Write(p []byte) (n int, err os.Error)
  79. 79. }
  80. 80. var w Writer
  81. 81. w = os.Stdout // Stdout implementa Writer
  82. 82. fmt.Fprintf(w, &quot;hello, writern&quot;) </li></ul></ul>
  83. 83. Lenguaje <ul><li>Manejo de errores
  84. 84. func Read(file string) (string, os.Error) {
  85. 85. f, err := os.Open(file)
  86. 86. if err != nil {
  87. 87. return &quot;&quot;, err
  88. 88. }
  89. 89. defer f.Close() // se llama al acabar
  90. 90. // ...implementación
  91. 91. return result, nil
  92. 92. } </li></ul>
  93. 93. Lenguaje <ul><li>Concurrencia: Goroutines </li><ul><li>func go list.Sort()
  94. 94. func Announce(msg string, delay int64) {
  95. 95. go func() {
  96. 96. time.Sleep(delay)
  97. 97. fmt.Println(msg)
  98. 98. }()
  99. 99. } </li></ul></ul>
  100. 100. Lenguaje <ul><li>Channels </li><ul><li>c := make(chan int) // crear el canal
  101. 101. go func() {
  102. 102. c <- operacion()
  103. 103. }()
  104. 104. hacerOtrasCosas()
  105. 105. d := <-c //obtiene el valor </li></ul></ul>
  106. 106. Paquetes <ul><li>El programa inicia en main.main </li><ul><li>package main
  107. 107. import {
  108. 108. format &quot; fmt &quot;
  109. 109. &quot; template/parse &quot;
  110. 110. }
  111. 111. func main() {
  112. 112. //...
  113. 113. } </li></ul></ul>
  114. 114. Herramientas <ul><li>gofix: reescribe programas usando las apis antiguas
  115. 115. godoc: extrae documentación del código fuente
  116. 116. gofmt: formatea el código fuente </li></ul>
  117. 117. Proyectos <ul><li>web.go: framework web
  118. 118. go-gtk: bindings para GTK
  119. 119. mgo: drivers para MongoDB
  120. 120. mustache.go: lenguaje de templates
  121. 121. appengine-go: SDK para App Engine
  122. 122. Paquetes más populares: http://godashboard.appspot.com/package </li></ul>
  123. 123. Benchmarks <ul>Fuente: Computer Language Benchmarks Game </ul>
  124. 124. Benchmarks <ul>Fuente: Computer Language Benchmarks Game </ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×