go基础语法|青训营笔记

380 阅读3分钟

package main//代表程序属于main包的一部分

 import "fmt"//导入标准库的fmt包用于与字符串相关的一些操作 

 func main() {//main函数 

 fmt.Printf("hello,world")//调用了fmt包的Printf来输出字符串 

go语言数据类型 

字符串为内置类型可以通过+号拼接,可用等于号判断字符串 

var a="initial"//var声明会根据数据确定类型

int var b,c int = 1,2//也可以声明类型

 g:=a+"foo"//也可以通过:=来声明变量 

if else 

go 中的if 与else if后无()且执行的语句必须在{}内部

循环 

go中循环只有for for后判断条件不加() 

switch switch后的语句不加(),且每一种情况都不需要加break去跳出 switch后可不加变量,在case中添加判断语句 

go中有数组类型 

切片 

切片是可以动态修改长度的 

s := make([]string, 3)

 s[0] ="a" s[1]="b"

 s[2]="c" s= append(s,"d")//向s中追加元素并返回追加后的s 

s= append(s,"e","f") 

c:= make([]string,len(s)) 

copy(c,s)将s的数据拷贝到c 

fmt.Println(s[2:5])//输出了cde,s[2]到s[4]不包括第五个

 fmt.Println(s[:5])//输出了abcde 

fmt.Println(s[2:])//输出了cdef 

map m:= make(map[string]int)//创建map类型

 m["one"]=1 m["two"]=2 fmt.Println(m)//输出map[one :1 two :2] 

fmt.Println(m["two"])//输出2 

delete(m,"one") //删除ky对 

r,ok :=m["unknow"] fmt.Println(r,ok)//输出0 false ok判断map中是否有这个 

range可以用来快速遍历map m :=map[string]string{"a":"A","b":"B"} 

for k,v:= range m{ 

b B; a A fmt.Println(k,v)

函数

 func add(a int,b int) int{//数据类型后置 

 return a+b 

函数也可以返回多个值

 func exists(m map[string]string,k string)(v string,ok bool){

 v,ok =m[k]//判断map中是否有k并返回k对应的值 

 return v,ok 

指针

 func add(n *int){ *n+=2 } 调用时候要用add(&n)

类似于引用传递

 结构体 

type user struct{ name string 

 password string

 } 

a:= user{name:"wang",password:"123456"} 

可以通过a.name与a.password修改 

结构体变量也可以作为传参 

结构体方法 func (u user) checkPassword(password string) bool{ 

 return u.password ==password

 } 

调用方法 a:= user{ "wang","123456"} b:=a.checkPassword("123")//b=true 

错误处理 

type user struct{ name string 

 password string 

func findUser(users [ ]user, name string) (v *user,err error){ 

 for _,u:=range users{ 

 if u.name==name{ return &u,nil } 

 } return nil,errors.New("not found") 

调用时候需要写两个变量 if err != nil{//判断错误是否存在

 fmt.Println(err)//打印错误

return

 } 

字符串操作 

在string包中 import "string"

 strings.Contains(a,"ll")//判断a中是否有ll返回类型bool

 strings.Count(a,"l")//记录a中l出现的次数

 strings.Index(a,"ll")//查找ll在a中出现的位置 

strings.Join([]string{"he","llo"},"-")_连接多个字符串

 strings.Repeat(a,2)//将a输出两遍 

strings.ToLower(a)//将a内元素全部变成小写 

strings.ToUpper(a)//将a内元素全部变成大写 len(a)//返回a的长度 字符串格式化 fmt.Printf("s=%v\n",s)//类似c语言的输出,但是%v可以输出任何类型 fmt.Printf("s=%+v\n",s)//会得到详细的数据

 fmt.Printf("s=%#v\n",s)//详细程度更高 

json处理 

type user struct{ Name string 

 Password string

 Age int `json:"age"`//标记后输出的为小写 

}

 使用json需要将结构体成员开头大写 buf =json.Marshal(a)//a为结构体类型,将a中数据数列化 打印的时候需要使用对应结构体成员类型强制转换来打印,数列化后大小字母排头

 时间处理

 now:=time.Now()//获得现在时间

 t:=timeDate(....,time.UTC)//构建时间

 diff:=t2.Sub(t)//将t2-t获取时间段

 diff.Minutes()//获取分钟 

diff.Second()//获取秒

 时间格式化t.Format("2006-01=01 15:04:05")

 t.Unix()//获取时间戳 

数字解析 

import "strconv" n,_:=strconv.ParseInt("111",10,64)//将字符串111按10进制以64位精度处理,如果进制为0则自动推测 

进程信息

 import( "os" "os/exec" )