Golang基础语法
-
Go程序基本结构
package main // go程序入口,表示该程序属于main包 import "fmt" // 导入标准库中的包 func main() { //main函数,入口函数 fmt.Println("Hello world") //使用fmt包中的函数打印 }在终端中使用
go run命令编译Go程序并直接运行,使用go build编译Go程序测试是否编译错误。后者会生成可执行文件,后者不会。 -
变量的声明和使用
Go中常用的类型包括字符串、整型、浮点型和布尔型,变量类型可以显示声明或者隐式声明,显示声明会自动判断变量类型,使用
var关键字声明一个变量。变量的声明有以下几种方式:(1)
var identifier = value,Go将自动判断变量的类型var a = 10 var b = "hello world" var c = true(2)
var identifier type = value,显示声明变量的类型var a int = 10 var b string = "hello world" var c bool = true(3)
var identifier0 type / identifier1 := indentifer,声明一个变量0及其类型,然后使用:=符号赋值给变量1var a int var b string var c bool d := a e := b f := c需要注意的是
=和:=,前者只能用来赋值,后者表示声明和赋值。Go中声明的变量必须使用,否者编译不通过,这和c、Java等有区别;而常量使用const关键字声明(常量的值可以是表达式),在程序中可以不使用,如下: -
选择结构与循环结构
(1)选择结构使用
if condition {} else {},其中条件不需要圆括号(),选择结构内部需要使用花括号{}(2)Go中循环结构只使用
for condition {},与C类似,条件也不需要圆括号(3)Switch分支中可以使用任意类型作为条件,在case中不需要使用break跳出
-
数组与切片(slice)
(1)数组为定长,使用
len得到数组长度。示例如下:var a [4]int b := [4]int{1, 2, 3, 4} c := [2][2]int{{1, 2}, {3, 4}}(2)切片可以看作可变长的数组,使用
make关键字声明。append函数可用来在切片后添加元素,copy函数可用来将所有元素赋值到一个新切片。切片可以使用索引加冒号的方式获取数组元素,与python类似。s0 := make([]string, 2) s1 := []string{"1", "2", "3"} -
map
Go中使用
identifier := make(map[KeyType]ValueType, initialCapacity)声明一个map。map为无序集合,通过key查找value。m := map[string]int{ //创建一个切片并赋初值 "key1": 1, "key2": 2, } fmt.Println(m) //打印切片 v1 := m["key1"] //查找key1的值 fmt.Println(v1) v3, exist := m["key3"] //查找key3的值,不存在v3返回空值,int型为0,exist返回false fmt.Println(v3, exist) delete(m, "key2") fmt.Println(m) //打印删除后的切片 -
函数
Golang中
func关键字定义函数,参数类型写在变量后面,返回值可以有多个值func add(a int, b int)(v int, flag bool) { return a + b, true } func add2(a, b int)(v int, flag bool) { return a + b, true } -
指针与结构体
Go中指针和结构体与C类似,使用
*定义一个指针,type identifier struct {}定义一个结构体。可以在函数声明中指定结构体,相当于类中方法。type user struct{ //定义一个user结构体 name string //姓名 sex bool //性别 } -
错误处理
Go中错误处理没有像Java中的
try... catch...,错误处理的方法主要是使用error类型返回错误信息 -
字符串操作
字符串操作导入
strings包,调用不同的函数对字符串进行需要的操作,常用的有:func Compare(a, b string) int //比较两个字符串,返回0表示相等,1表示a>b,-1表示a<b func Contains(s, substr string) bool //是否包含子串substr func HasPrefix(s, prefix string) bool //前缀是否为prefix func HasSuffix(s, suffix string) bool //后缀是否为suffix func Index(s, substr string) int //子串的开始序号,从0开始 func Join(elems []string, sep string) string //增加字符串 func Repeat(s string, count int) string //将原串重复count次 func Replace(s, old, new string, n int) string //替换字符串,n=-1时全部替换,n>0时,按查找顺序替换n个 func Split(s, sep string) []string //去除指定子串 -
JSON处理
导入官方
encoding/json库,结构体中只需要保证每个的字段第一个字母为大写,就可以用json.Marshal序列化,json.Unmarshal反序列化。package main //该代码来自官网https://pkg.go.dev/encoding/json#Marshal import ( "encoding/json" "fmt" "os" ) func main() { type ColorGroup struct { ID int Name string Colors []string } group := ColorGroup{ ID: 1, Name: "Reds", Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, } b, err := json.Marshal(group) if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) } Output: [{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]
总结以上strings包操作字符串,encoding/json操作json数据,time包含时间处理,strconv包含数字和字符串的转换,os或os/exec获取系统相关的操作。