GO语言基础语法 | 青训营笔记

87 阅读3分钟

语言简介

GO 语言的特点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

初始样例————实现一个简单的HTTP静态文件服务器

package main

import (
	"net/http"
)

func main(){
	http.Handle("/",http.FileServer(http.Dir(".")))     //在标准库的http包调用File Server类里面链接一个路由,实现静态文件的访问
	http.ListenAndServe(":8080",nil)        //监听8080端口并启动服务器
}

基础语法

变量

常见变量

常见的变量类型包括字符串、整数、浮点型、布尔型等。其中字符串是内置类型,可以直接通过“+”号拼接。也可以直接用“=”号比较字符串。Go的变量优先级与Java、C++类似。

var a = "initial"
g := a + "fop"

变量声明

1. var a = "initial" //自动推导变量类型
   var b,c int = 1,2 //也可以显式指出变量类型
2. f := float32(e)

常量

把var改为const。const没有确定类型,可根据上下文自动推导类型。

const s string = "constant"

if / else 条件判断

if后面没有括号,单行不能省略大括号,其他与C/C++无异。

for / while 循环

Go只有for循环,没有while和do-while循环。

1.    for{
            fmt.Println("loop")
            break
        }
2.    for j:=7;j<9;j++ {
            fmt.Println(j)
      }

Switch分支结构

功能强大,在case里面默认不需要加break语句会自动退出,可以使用任意变量类型,可以取代if/else语句,其他与C/C++一致。

数组

长度固定,不可变。在日常使用中多用长度可变的切片而不是数组。

1   var a[5] int
    a[4]=100

2.  b:=[5]int{1,2,3,4,5}
    fmt.Println(b)

切片

可变长度的数组,可以用make创建。可以任意时刻更改长度,修改后仍可当数组使用。

s:=make([]string,3)
s[0]="a"
s[1]="b"
s[2]="c"
s=append(s,"d")
s=append(s,"e","f")
c:=make([]string,len(s))
copy(c,s)
fmt.Println(s[2:5]) //[c d e]
fmt.Println(s[:5]) //[a b c d e]
fmt.Println(s[2:]) //[c d e f]

map

C/C++中的哈希表。可以用make创建。是完全无序的。遍历时是随机的。

m:=make(map[string]int)
m["one"]=1
m["two"]=2
f,ok:=m["unknow"]
fmt.Println(r,ok) //0 false
delete(m,"one")

range

可以遍历数组和切片。

nums:=[]int{2,3,4}
sum:=0
for i,num:=range nums{
    sum+=num
    if num==2{
        fmt.Println("index:",i,"num:",num)
    }
}

函数

几乎所有函数都是返回多个值,第一个值是返回结果,第二个是错误信息。

指针

使用有限,对函数中传入的参数进行修改。

结构体

结构体是带类型字段的集合。

结构体方法

类似于类成员函数。

错误处理

在函数的返回值里添加error变量,方便查看是哪个函数发生错误。

字符串操作

Contrains、Count、Split等函数。

字符串格式化

最常用的方法是fmt.println(),fmt.printf("%v"),%v可以输出任何类型的变量,%+v更加详细的结构,%#v进一步详细,%.2f保留两位小数的浮点数。

JSON 处理

保证字段结构体的每一个字段的第一个字母大写。

时间处理

最常用的方法是time.Now(),可以获取当前时间,格式化方法是time.format("2006-01-02 15:04:05")。

数字解析

方法都在strconv包里,可使用此包的ParseFloat()等函数进行转换。

进程信息

使用fmt.println(os.Args)可以打印当前进程信息。