快捷搜索:  汽车  科技

Go语言学习笔记(go语言学习-1)

Go语言学习笔记(go语言学习-1)// hello package main import ( "fmt" //标准输入输出包 ) func main() { fmt.Println("Hello World Hello Go!") }在命令行 进入源文件所在的目录手动创建一个hello.go文件.目前go版本已经是1.18 已经支持泛型了.go 命令提示信息如果看到和上图一样的效果 代表环境变量没有问题 其实也不会出现什么问题.

起因

五四青年节(2017.05.04) 那天下午没有回去 公司规定28岁之前 下午可以不上班.就顺便看了go语言 算是做个笔记.

1. 进入正题 先安装go语言环境和liteide

go语言环境下载地址:https://dl.gocn.io/golang/1.8/go1.8.windows-386.msi

go语言IDE环境下载地址:https://dl.gocn.io/editor/liteide/liteidex30.3.windows-qt5.zip

因为下载go语言环境是个安装包 在安装之后配置一下系统环境(1.8不需要).记得最早安装是go1.5 还需要自己配置环境变量.在命令行测试一下

目前go版本已经是1.18 已经支持泛型了.

Go语言学习笔记(go语言学习-1)(1)

go 命令提示信息

如果看到和上图一样的效果 代表环境变量没有问题 其实也不会出现什么问题.

2. 惯例 hello world你懂的!

手动创建一个hello.go文件.

// hello package main import ( "fmt" //标准输入输出包 ) func main() { fmt.Println("Hello World Hello Go!") }

在命令行 进入源文件所在的目录

Go语言学习笔记(go语言学习-1)(2)

go build 编译源文件 生成可执行文件

3. 简单介绍上面的go文件(开始使用liteide)

package main //导入包两种方式 //1.导入单个包(package) import "fmt" //输入输出的包 和c语言的stdio.h import "runtime" //2.导入多个包(package) 对比单个导入的方式 这个更友好 import ( "net/http" //http相关的包 "time" //时间相关的包 ) func main() { fmt.Println("Hello World Hello Go!") //输出字符串 }4. 定义变量 (和c/c /java/c#不同的) 不需要每行结束以分号

package main // hello import ( "fmt" ) func main() { var i int //定义i1为int类型变量 i = 1 //为变量i1赋值为1 var x y int = 1 2 //定义多个相同类型的变量并赋值x=1 y=1 //var num int = 1 简写用法 语法糖 num := 1 //定义num变量值为1 该变量在编译时确定类型 }5. 定义常量

//定义常量 const world = "go"6. 条件语句

//条件语句 j := 100 if j > 1 { fmt.Println("j < 0") } else { fmt.Print("j > 0") }7. switch语句

//分支判断 switch os := runtime.GOOS; os { case "darwin": fmt.Println("mac os!") case "linux": fmt.Println("linux !") default: fmt.Println("%s!" os) }8. 循环语句

for方式1:

//for使用1 sum := 0 for i := 0; i <= 100; i { sum = i } fmt.Println("su

for方式2

//for使用2 go语言没有while语句 sum := 1 for sum < 1000 { sum = sum }

死循环 (还是和其他语言很不同的 没有 while(true) 用法)

//for 死循环 for { //具体执行语句 }9. 使用结构体(go语言没有class 只有struct)

//定义一个结构体 type Student struct { X int Y int } func main() { //初始化结构体 并进行赋值 stu := Student{1 10} //修改结构体变量的值 stu.X = 20 fmt.Println(stu) //输出结果为{20 10} }10. go语言中可以使用指针 但指针不能进行运算

val := 100 pVal := &val //取变量val的地址 将指针变量pVal指向val的地址 fmt.Println("指针pVal的值 " *pVal) *pVal = 200 fmt.Println("pVal和val的值" *pVal val) //pVal和val的值 200 20011. 数组

//定义固定大小字符串数组 var arr [2]string //对数组元素进行赋值 arr[0] = "hello" arr[1] = "go" //输出单个元素 fmt.Println(arr[0] arr[1]) //结果:hello go fmt.Println(arr) //结果:[hello go]

//定义int类型数组 arr2 := []int{1 2 3 4 5 6 7 8 9 10} fmt.Println("arr2 ==" arr2) //循环遍历数组元素 for i := 0; i < len(arr2); i { fmt.Printf("arr[%d]=%d\n" i arr2[i]) }12. 切片

//切片 java等语言没有这个特性 c#在8.0(.Net Core 3.0)也加入了切片 //切片比较方便 只要指定提取数组的区间 就生成一个新的数组 arr2 := []int{1 2 3 4 5 6 7 8 9 10} //[:4]取第0个元素到第四个元素之间的元素 fmt.Println("arr2[:4]==" arr2[:4]) //arr2[:4]== [1 2 3 4] // [1:4]取第一个元素到第四个元素之间的元素 fmt.Println("arr2[1:4]==" arr2[1:4]) //arr2[1:4]== [2 3 4] //[4:] 取第四个元素(包含第四个元素)到数组的最后的一个元素 fmt.Println("arr2[4:]==" arr2[4:]) //arr2[1:4]== [5 6 7 8 9 10]13. 字典

//字典 map dic := make(map[string]int) dic["userid"] = 100 dic["userinfo"] = 200 //遍历字典 for key val := range dic { fmt.Printf("dic[%s]=%d\n" key val) } //输出结果 //dic[userid]=100 //dic[userinfo]=20014. 协程(重要)

package main // hello import ( "fmt" "time" ) func main() { //协程:轻量级线程 在go语言中 弱化了线程的概念. //在操作系统中 只有进程和线程 线程才是系统调度的最小单位 //暂且当成线程使用 使用很方便 比其他语言都要简单直接 go say("go") say("hello ") } func say(content string) { for i := 0; i < 2; i { time.Sleep(100 * time.Millisecond) //要引入time fmt.Printf("%s%d\n" content i) } //结果:还是和线程执行一样 执行顺序无法保证(不加同步限制) //go0 //hello 0 //hello 1 //go1 }15. channel 通道

package main // hello import ( "fmt" ) func main() { //通道channel 用于协程之间传递数据 arr4 := []int{7 2 8 -9 4 0} //1.先创建一个通道 c := make(chan int) //2.通过切片将输入数组分别放入两个协程中执行 go sum(arr4[:len(arr4)/2] c) go sum(arr4[len(arr4)/2:] c) //3.从通道中取数据 x1 x2 := <-c <-c fmt.Println(x1 x2 x1 x2) } func sum(arr []int c chan int) { sum := 0 for _ v := range arr { sum = v } //将数据放入通道 c <- sum }结论

对go语言进行了简单的学习 还是有很多的收获.

  1. go语言 声明变量语法和JavaScript类型
  2. 语法做了很多简化 自带代码格式化工具 如果不符合规范 是无法格式化的
  3. go语言原生支持协程 其他语言用第三方库也是可以实现的
  4. go语言对http使用 特别简单

因为最近事情比较多 没有较多的时间 写新的东西.关于go学习笔记有3篇 这个迁移比较快

个人能力有限 如果您发现有什么不对 请私信我

如果您觉得对您有用的话 可以点个赞或者加个关注 欢迎大家一起进行技术交流

猜您喜欢: