这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
golang基础语法
-
变量定义
使用关键字var进行定义,后面接变量名称和变量类型
var a int var b string统一定义
var ( a int b string )快速声明,可以根据后面的内容自动推断变量类型
a := 123 b := "golang" -
常量定义
使用关键字const,后接常量名称,进行直接赋值,不需要指定变量类型
const x = 123 const str = "golang" -
算数运算符
与其他语言类似,支持加、减、乘、除,取余,自增,自减操作,不同的是go只有后置的自增、自减
a+b a*b a-b a/b a%b a++ b-- -
运算符
== 等于 != 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 && 与运算符 || 或运算符 ! 取反运算符 -
分支结构
- if-else
if 条件不用加括号,必须为bool类型
if true{ 执行 }else{ 不执行 }if (){ }else if(){ }else{ }-
switch-case
每个case后面自带break
switch x{ case 1: case 2: default: }
-
循环
golang中只有for循环
for{ }//不设定条件的for循环 for i := 4; i < 7; i ++{ } //有条件的for循环 -
数组
- 表示存放5个int类型的数组
var x [5]int a[4] = 6 len(a) //数组a的长度 b := [5]int{2,3,4} //定义数组的同时进行初始化-
二维数组
var x = [3][2]int
-
切片
创建切片
s := make([]string,3) s = s.append("xxx") //append 添加,赋值回原数组 len(s) //s的长度 c := make([]string,len(s)) copy(c,s) // 把s复制给c s[1:3] //s[1],s[2] s[:3] //s[0],s[1],s[2] s[2:] //s[2]....s[len(s)-1] -
map
m := make(map[string]int) //创建一个map m["xxx"] = 1 //通过方括号插入键值对 m["xxx"] //通过方括号读取键值对 delete(m,"xxx") //删除键值对 -
range
对以一个slice或map可以使用range进行更加简单的遍历
- 数组
var x = [5]int for i,num = range x{ }// i下标, num是x[i]的值- map
m := make(map[String]int) for k,v = range m{ }//k map的键值, v s是map[k] -
函数
func add(a int,b int) int { return a+b }golang中的函数可以返回多个值,
第一个值返回真正的结果,第二个值返回错误信息
func exists(m map[string]string,k string) (v string,ok bool){ v,ok = m[k] return v,ok } -
指针
golang中的指针的用处非常有限,常用在对参数的修改
func add(n int){ n+=2 } // 不能改变n的值 func add(n *int){ *n+=2 }//可以改变n的值 func main(){ n := 5 add(&n) //调用时 } -
结构体
type user struct{ username string password string } func main(){ a := user{name:"xxx",password:"1555"} b := user{"xxx","555"} c := user{name:"xxx"} c.password = "55" var d user d.username = "xxx" d.password = "885" }结构体也可作为函数的参数,同时有指针和非指针之分
-
结构体方法
func (u user) checkpassword(password string) bool{ return u.password == password } func (u *user) resetusername(username string) { u.username = username }
-
-
错误处理
使用返回值来返回异常
func findUser(users []user,name string) (v *user,err error){ for _,u := raneg users{ if u.username == name{ return &u,nil } } return nil,errors.New("Not Found") } -
字符串操作
a := "hello" strings.Contains(a,"ll") //包含某个字符串 strings.Count(a,"l") //计算有多少个字符窜 strings.HasPrefix(a,"he") //是否是以该字符串为前缀 strings.HasSuffix(a,"lo") //是否以该字符串为后缀 strings.Index(a,"l") //查找字符串在a中的位置 strings.Join([]string{"he","llo"},"-")//he-llo strings.split("a-b-c","-") [a,b,c] -
JSON操作
type userInfo struct{ Name string Age int Hobby []string } //结构体中的每个变量首字母大写 json.Marshal() //序列化 josn.Unmarshal(a,&b) //b是反序列化之后的值