前言
现在 Go 语言越来越流行,它背后有 Google的支持,而且已经有很多人开始使用 Go 语言做服务端开发。现在我们就来看一下该如何快速的学习Go 语言。
在学习一门语言之前,首先我们要了解都该学习这门语言的那些知识点。我这里简单列举一下:
- 基本语法,包括变量/常量的定义,数组,if/else语句,for循环,函数,结构体以及指针。
- Go 特性
- 如何使用Go语言
下面我们就一项一项来看。
基本语言
Go的基本语法与其它语言都差不多,我们学习语言的最好方法就是类比法。我用这种方法学习新语言百试不爽。
知识点c语言go语言说明定义变量int a;var a int
定义常量const int a = 3.14;const a int = 3.14
if语句if (a>b){}if a>b {};
for循环for(int a=0; a <10; a++){}for a:=0; a<10; a++ {}
函数int func(int a, int b){}func myfunc( a int, b int) int {}
多值返回void myfunc(int * out1, int* out2){};func myfunc() (int, int) {return y, x}C语言输过输出参数,go直接返回数组int arr[10];var arr [10] int
结构体struct aaa{ int a; int b;};type aaa struct {a int b int}
指针int *p = NULL;var p *intgo不需要释放空间管道无,可以自己实现queuechannelgo中的channel就是一个队列,用于goroutine通讯用
看几个代码例子:
Go 定义变量
package main //可执行的go程序必须使用package main
import "fmt" //引入文件,类似于 C 语言中的 #include。fmt 类似于stdio.h
func main() { // main 函数入口点
var a int
var b float32
var c, d float64
e, f := 9, 10
a = 5
b = 3.3
c = 8.1
d = c
fmt.Println(a, b, c, d, e, f)
}
Go 使用if/else
package main
import "fmt"
func main() {
a := 7.0
b := 9.0
fmt.Println(a, b)
if a > b {
fmt.Println("a > b")
} else {
fmt.Println("b > a")
}
}
Go 使用 for
package main
import "fmt"
func main() {
for a := 0; a < 10; a++ {
fmt.Println(a)
}
b := 0
for true {
fmt.Println(b)
b++
if b >= 10 {
break
}
}
}
Go 函数
package main
import "fmt"
func sum(a, b int) int {
return a + b
}
func main() {
fmt.Println("the result is ", sum(4, 5))
}
Go 数组
package main
import "fmt"
func main() {
var arr0 = [3]int{9, 8, 7}
var arr1 [5]int
var arr2 = [...]float32{5, 5, 5, 6, 6, 6}
for i := 0; i < 5; i++ {
arr1[i] = i
}
fmt.Println(arr1[0], arr1[1], arr1[2], arr1[3], arr1[4])
for i := 0; i < 3; i++ {
fmt.Println(arr0[i])
}
for i := 0; i < 6; i++ {
fmt.Println(arr2[i])
}
}
Go 指针
package main
import "fmt"
func main() {
var a int
var p *int
a = 5
fmt.Println("before a=", a)
p = &a
*p = 6
fmt.Println("after a=", a)
}
Go 特性
package mainfunc (srv *Server) Serve(l net.Listener) error {}
如何使用Go语言
Go语言是 Google 专门用于开发服务器的一种语言,主要是网络服务器程序。下面我们就来看一下Go如何实现一个最简单的 Web 服务。
这个 Web 服务有几个重要的点:
- 引入 net/http 库
- 通过 http 库打开侦听端口
- 设置收到网络数据后的回调函数
package main
import (
"fmt"
"net/http"
"strings"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析参数,默认是不会解析的
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "Hello Wrold!") //这个写入到w的是输出到客户端的
}
func main() {
http.HandleFunc("/", sayhelloName) //设置回调函数
err := http.ListenAndServe(":9090", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
小结
本文首先通过类比法,通过与C语言的类比来看Go是如何学习的。然后又介绍如何通过Go实现一个最简单的WebServer。通过上面的介绍大家是不是觉得Go语言还是非常好学且功能很强大的一门语言呢?