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" )