GO语言基础与小项目实战——ycgg学GO

Go Day01


1.1什么是Go语言

  • 使用标准库即可开发高性能 、高并发应用程序(标准库功能十分强大,稳定)

  • 基于C语言,且比C语言容易

  • 循环只有for,遍历循环较为容易

  • 适配多系统,树莓派等

  • 垃圾回收,无须考虑内存释放

实例:

简单的静态页面的代码

2.1开发环境

直接在golang官网安装,或者下载vsc编辑器后下载GO插件

https://goproxy.cn网址按照教程配置第三方包,可以提高依赖的下载速度,该网站还有自托管 Go 模块代理的配置教程

golang学生可以免费申请使用,具体操作和idea免费申请类似

2.2.1基础语法--hello world!

packagemain

import (

"fmt"

)

funcmain() {

fmt.Println("hello world")

}

package main表示该文件属于main包的一部分,mian包即程序的入口包,该文件即程序的入口文件

导入标准库的fmt包:主要往屏幕输入输出字符串,格式化字符串(该操作类似C的导入头文件)

func main即主函数,调用fmt的println输出

运行该程序使用go run命令

生成二进制文件使用go build命令

鼠标放在Println上可以链接跳转包的官方文档,查看其他方法的使用方法,类似idea

2.2.2基础语法--变量

字符串是内置类型,类似string,可以直接用 + 拼接,也可以用 = 去比较两个字符串

变量的声明:

var 【name】 = 【value】

比如: var a = "initial"

会根据value自动匹配变量的类型,如果想直接确定类型,可以在【name】后直接将类型名标注

比如: var b, c int = 1, 2

或者

【变量名】 := 【value】

声明常量时,将var改为const

可以声明多个类型不同的变量(类型由初始化表达式推导):

vari, j, kint // int, int, int

varb, f, s=true, 2.3, "four"// bool, float64, string

packagemain

import (

"fmt"

"math"

)

funcmain() {

vara="initial"

varb, cint=1, 2

vard=true

varefloat64

f :=float32(e)

g :=a+"foo"

fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0

fmt.Println(g) // initialapple

constsstring="constant"

consth=500000000

consti=3e20/h

fmt.Println(s, h, i, math.Sin(h), math.Sin(i))

}

2.2.3 基础语法 -- if else

和C基本类似

不同:

if和else if后没有条件判断的括号(小括号)且必须有花括号括住

packagemain

import"fmt"

funcmain() {

if7%2==0 {

fmt.Println("7 is even")

} else {

fmt.Println("7 is odd")

}

if8%4==0 {

fmt.Println("8 is divisible by 4")

}

ifnum :=9; num<0 {

fmt.Println(num, "is negative")

} elseifnum<10 {

fmt.Println(num, "has 1 digit")

} else {

fmt.Println(num, "has multiple digits")

}

}

2.2.4 基础语法 -- 循环

go 语言只有for循环一种

for后面什么都不写即代表死循环

可以使用经典的C语言的for循环,格式相同,同样也有continue和break的跳出循环方式

以下是集中for循环的使用方法

packagemain

import"fmt"

funcmain() {

i :=1

for {

fmt.Println("loop")

break

}

forj :=7; j<9; j++ {

fmt.Println(j)

}

forn :=0; n<5; n++ {

ifn%2==0 {

continue

}

fmt.Println(n)

}

fori<=3 {

fmt.Println(i)

i=i+1

}

}

2.2.5 基础语法 -- switch

go语言中Switch后面的变量名和if一样不需要括号

和C语言不同的是,C语言case语句后没有break默认走完所有case,

而go语言默认是不走的

在go中Switch还有更加高级的用法,可以在Switch后不加任何的变量名,而 在case后添加条件判断,可以代替if语句使条件的选择更加清晰,代码更加美观

packagemain

import (

"fmt"

"time"

)

funcmain() {

a :=2

switcha {

case1:

fmt.Println("one")

case2:

fmt.Println("two")

case3:

fmt.Println("three")

case4, 5:

fmt.Println("four or five")

default:

fmt.Println("other")

}

t :=time.Now()

switch {

caset.Hour() <12:

fmt.Println("It's before noon")

default:

fmt.Println("It's after noon")

}

}

2.2.6 基础语法 -- 数组,切片

1.普通数组

和C语法和使用方法基本相同

vara [5]int

a[4] =100

b := [5]int{1, 2, 3, 4, 5}

vartwoD [2][3]int

fori :=0; i<2; i++ {

forj :=0; j<3; j++ {

twoD[i][j] =i+j

}

}

2.切片

切片是一个可变长度的数组,类似java的list集合,可以随时追加元素

切片使用make创建,用append进行追加,需要注意追加后要返回切片(会自动进行扩容并返回新的长度)

使用append函数追加元素可以一次性追加多个元素,甚至可以直接追加一个切片

同样可以用copy函数拷贝切片

go也有类似Python的切片操作

fmt.Println(s[2:5]) // [c d e],打印2~5(不包括5)

packagemain

import"fmt"

funcmain() {

s :=make([]string, 3)

s[0] ="a"

s[1] ="b"

s[2] ="c"

fmt.Println("get:", s[2]) // c

fmt.Println("len:", len(s)) // 3

s=append(s, "d")

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

fmt.Println(s) // [a b c d e f]

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

copy(c, s)

fmt.Println(c) // [a b c d e f]

fmt.Println(s[2:5]) // [c d e]

fmt.Println(s[:5]) // [a b c d e]

fmt.Println(s[2:]) // [c d e f]

good := []string{"g", "o", "o", "d"}

fmt.Println(good) // [g o o d]

}

2.2.7 基础语法 -- map

使用过程中用到的最多的数据结构

  • 同样,使用make创建

m :=make(map[string]int)

m["one"] =1

m["two"] =2

其中string是key的类型,int是value的类型

  • 初始化一些map中的值

ages :=map[string]int{

"alice": 31,

"charlie": 34,

}

  • 使用delete去删除

delete(m, "one")

  • 在使用时可以在变量后面加一个ok来获取对应key索引的value是否存在如果存在变量为value,ok为true,否则,变量为对应类型的零值,ok为false

r, ok :=m["unknow"]

fmt.Println(r, ok) // 0 false

  • map是无序的,多次迭代会得到不同的结果

2.2.8 基础语法 -- range

  • 一个迭代工具,可以快速遍历数组,切片,map等,类似java的foreach快速遍历

  • 在迭代时可以同时输出对应的key和value

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 1
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值