1-1走进Go语言基础语法
开发环境 基础语法 标准库
Go语言:
1. 高性能,高并发:不需要外借库
2. 语法简单,学习曲线平缓:for循环
3. 丰富的标准库:不需要借助第三方库,稳定可迭代
4. 完善的工具链
5. 静态链接
6. 快速编译:多平台文本编译
7. 跨平台
8. 垃圾回收
市面上多公司使用GO语言编程,效率简单,入手简单。同时也因为部署简单,学习成本低,性能比较好。
基础语法入门:
Helloworld打印:
package main
import {
“fmt”
}
func main(){
fmt.Println(“hello world”)
}
运行代码:
go run example/01-hello/main.go
运行结果:
hello world
Golang
1.变量: 字符串 可进行加号拼接,等号比较
定义变量方式:
var name= 或者 var name float64
eg: var b,c int =1,2
f:=float32(e)
g:=a+”foo”
2.常量 const 根据上下文确定常量类型
Eg: const s string =”constant”
Const a =300
3.if else判断语句
If condition { }
Eg:
If 8-a==0
{ fmt.Println(“hao”) }
4.循环
for { }
Eg:
for n:=0;n<5;n++
{ fmt.Println(“hao”) }
for后头也可以直接加判断的语句
Continue break可控制循环的继续和中断
5.Switch
Switch a{ } 可用多类型元素,不用像其他的语言使用break
Eg:switch a{
case 1:fmt.Println(a)
case 2:fmt.Println(b)
default:fmt.Println(c) }
6.数组
var a[5] int
b:=[5]int{1,2,3,4,5}
var tt [2][3] int
打印:fmt.Println(b)
7.切片
不同于数组的是它可以任意更改长度,使用make创建切片,使用append来追加元素
Eg:
s:=make([ ]string,3)
s[0]=1
len(s)长度
s=append(s,”d”)给s切片添加d元素
copy(c,s)将s元素copy到c去
s[2:5]包括切片第三个元素s[2]到第五个元素s[4]
s[:5]包括切片第五个元素s[4]及前面的所有 s[2:]包括从第三个元素s[2]到最后
8.map(如同hash)
m:=make(map[string] int)需要定义两个值,一个是key(这里是string),一个是value(这里是int)
map是完全无序的,遍历的时候不会根据数字或者字母进行顺序输出,而是随机排序
eg:m[“one”]=1
m2:=map[string]int{“one”:1, “two”:2}定义一个map
r, ok:=,m[“unknow”]
delete(m,”one”)删除关于key等于one的数据
9.range 方便遍历
对于一个slice或者map的话可以用range来快速遍历,使得代码能够更加简洁
Range遍历的时候,对于数组会返回两个值,一个是索引一个是对应位置的值,如果不需要索引则可以用下划线来忽略
Eg:m:=map[string]string{“a”: “A”,”b”: “B”}
for k,v:=range m{
fmt.Println(k,v) }
nums:=[ ]int {1,2,3}
sum:=0
for I,num:=range nums{
sum+=num
if num==2{
fmt.Println(“index:”,i, “num:”,num)
}}
10.函数
简单的可实现两个变量相加的函数,变量类型后置
func bb(a, b int)(a string, c bool)
eg:
func add(a int,b int)
{ return a+b}
11.指针
相较于c,c++的指针,支持的操作很有限,指针的一个主要用途就是对于传入参数进行参考
自增i的函数需要指针
func a(n *int)
{*n+=2} 实现自增加i的函数
在main中还要添加符号成为 a(&n) (为了类型匹配)
12.结构体 结构体方法(类似类成员函数)
带类型的字段的集合,用结构体的名称去初始化一个结构体变量,构造的时候需要传入每个字段的初始值
Eg:
Type user struct{
name string
password string
}
并在相应func中应用设定的结构体
可以为结构体去定义一些方法,具体有两种写法,带指针或者不带指针,带指针可以对结构体进行修改,不带指针,操作将是一个拷贝,无法对结构体进行修改
Eg:
func (u user) checkPassword(password string) bool
{ return u.password ==password}
Func(u *user)resetPassword(password string)
{ u.password =password}
func main()
{a:=user{name:”wang”,password:”1024”}
a.restPassword(“2048”)
fmt.Println(a.checkPassword(“2048”))}
13.错误处理(返回error (err error))
在GO语言里面使用一个单独的返回值来传递错误信息
能够很清晰的知道哪个函数返回了错误,并且能够用简单的if else来处理问题
在函数里面,在函数的返回值类型加一个error,代表可能会返回错误,实现过程中将会同时return两个值,出现错误,return nil和error,如果没有错误,将会返回原本的结果和nil
Func findUser(users []user,name string)(v*user, err error)
{ for _,u:=range users{
If u.name==name{ return&u,nil}}
14.字符串操作
对字符串的操作,strings.Contains(a,”ll”),strings.Count(a, “l”) index查找某个字符串的位置, join连接多个字符串, repeat重复多个字符串,replace替换字符串
字符串格式化(fmt.Println();fmt.Printf())将字符串进行格式转换
Eg:f:=3.14159265
fmt .Printf(“%.2f\n”,f)//3.14
可以轻易打印任意类型的变量,不需要区分数字字符串,
%+v打印详细结果,%#v更详细
s:=”hello” fmt.Printf(“s=%v\n”,s)//s=hello
p:=point{1,2} fmt.Printf(“p=%v\n”,p)//p={1,2}
fmt.Printf(“p=%+v\n”,p)//p={x=1 y=2}
fmt.Printf(“p=%#v\n”,p)//p=main.point{x=1,y=2}
15.JSON处理
对一个已有的结构体,只要保证每个字段的第一个字母是大写字母开头,这个结构体就能用JSON.marhaler去序列化,变成一个JSON的字符串。
默认序列化出来的字符串的风格是大写字母开头,而不是下划线,并可以在后面用json tag 等语法来去修改输出JSON结构里面的字段名。
16. 时间处理(date.Year…)
使用time.now()来获取当前时间
time.date构造一个带时区的时间,根据时间变量提取他的年月日。
Eg:t:=time.date(2022,3,27,1,25,36,0,time.UTC)
t2:=same form like above
fmt.Println(t.Year(),t.Month(),t.Day(),t.Hour(),t.Minute())
diff:=t2.sub(t)
可利用.UNIX来获取时间戳
17. 数字解析(strconv.ParseInt(),atoi可转换成字符)
进行字符串和数字之间的转换都在STR conv包下。
parseInt或者parseFloat解析一个字符串
Atoi把一个十进制字符串转成数字,itoA把数字转成字符串
Eg:func main(){
f,:=strconv.ParseFloat("1.234“,64)
fmt.Println(f)//1.234
n,_:=strconv.ParseInt("111",10,64)
fmt.Println(n)//111
n,_=strconv.ParseInt("0x1000",0,64)
fmt.Println(n)//4096
n2,_:strconv.Atoi("123")
fmt.Println(n2)//123
n2,err :strconv.Atoi("AAA")
fmt.Println(n2,err)//0 strconv.Ato:parsing "AAA":invalid syntax
}
如果输入不合化,这些函数都会返回error。
18.进程信息
os.argv来得到程序执行的时候的指定的命令行参数
so.getenv读取环境变量
ps:学习颇丰,初步的学习了GO语言,