Go语言基础语法|青训营

32 阅读6分钟

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语言,