一文带你入门go语言


go/golang是一门google开发的编程语言,其代码简洁易读,天生支持并发,完美契合当今互联网生态。
目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。
相信大家都听说过大名鼎鼎Docker就是用go语言所开发的。
接下来让我带你光速入门go语言!

go希望你把所有的项目都放到一个文件夹下,这个文件夹是GOPATH,这个文件夹下包含src(存放你所有的代码),bin(存放编译后二进制文件),pkg(存放编译后的库文件)。个人开发者直接在src下创建个人文件夹即可。

PS D:\go\src> mkdir project_one
PS D:\go\src> cd project_one
PS D:\go\src\project_one> touch main.go

上面的操作创建了一个文件夹以及go文件。
我们用任意文本编辑器打开main.go即可。

//这行代码来声明你的文件属于哪一个package,任何一个文件想build的话,必须是main package
package main//如果你想引用其他package,用import "包名" 来引用package
import "fmt"//go运行时会首选执行main函数,这个函数既不接受参数,也没有返回值
func main() {fmt.Println("Hello,world!")}

我们可以使用go run 文件名来运行,或者用go bulid生成可执行文件

PS D:\go\src\project_one> go run .\main.go
Hello,world!

下面我们来介绍变量

package mainimport "fmt"func main() {//用var 变量名 变量类型 来声明一个变量var i intvar s string//给变量赋值i = 7s = "Hello,world!"//打印变量fmt.Println(i)fmt.Println(s)
}
PS D:\go\src\project_one> go run .\main.go
7
Hello,world!
package mainimport "fmt"func main() {//还可以使用 变量名:=值 的形式来赋值,但仅限于函数内,go会根据值自动推导类型a := "你好,世界!"fmt.Println(a)
}
PS D:\go\src\project_one> go run .\main.go
你好,世界!

下面介绍go语言的元祖/数组

package mainimport "fmt"func main() {//go语言的元祖定义形式 var [元素数量]变量名 类型var a [5]intfmt.Println(a)//使用方式与其他语言的数组类似a[0] = 1a[1] = 3fmt.Println(a)
}
PS D:\go\src\project_one> go run .\main.go
[0 0 0 0 0]
[1 3 0 0 0]

数组使用在某些场景下不太方便是不是?go语言在数组的基础上进一步封装,叫做切片

package mainimport "fmt"func main() {s := []string{"北京", "上海"}fmt.Println(s)//使用append()函数,为切片增加元素s = append(s, "广州")fmt.Println(s)s = append(s, "鄂尔多斯")//既然叫切片,那么它当然可以"切"数据fmt.Println(s[2:4]) //它是左闭右开区间
}
PS D:\go\src\project_one> go run .\main.go
[北京 上海]
[北京 上海 广州]
[广州 鄂尔多斯]

接下来介绍一种键值对形式的数据类型,叫做map

package mainimport "fmt"func main() {//使用make()函数来为map分配空间info := make(map[string]string)//为map添加新项目info["name"] = "ekko"info["age"] = "18"info["gender"] = "male"info["class"] = "火箭101"//你可以使用delete()函数来删除项目delete(info, "class")fmt.Println(info)
}
PS D:\go\src\project_one> go run .\main.go
map[age:18 gender:male name:ekko]

拥有这些数据,想必大家也想到了遍历

package mainimport "fmt"func main() {//使用make()函数来为map分配空间info := make(map[string]string)//为map添加新项目info["name"] = "ekko"info["age"] = "18"info["gender"] = "male"info["class"] = "火箭101"//你可以使用delete()函数来删除项目delete(info, "class")fmt.Println(info)//在go语言中,没有while循环/*for 遍历变量:=初始值;循环条件;迭代变化 {循环体...}可以用这种方式来实现while(两个分号可省略)for ;循环条件; {循环体...}还有一种循环for k,v := range info {循环体...}下面我们使用第三种循环来遍历map*/for k, v := range info {fmt.Printf("%s-->%s\n", k, v)}//如果只想要键或值,我们可以将另一个用匿名变量(_)来接收for _, v := range info {fmt.Println(v)}
}
PS D:\go\src\project_one> go run .\main.go
map[age:18 gender:male name:ekko]
age-->18
gender-->male
name-->ekko
ekko
18
male

go语言中的函数

package mainimport "fmt"/*
函数的定义形式:func 函数名(参数列表) 返回值 {函数体
}
*/
func add(x int, y int) int {return x + y
}func main() {x := 11y := 55result := add(x,y)fmt.Println(result)
}
PS D:\go\src\project_one> go run .\main.go
66

下面介绍一个非常重要的东西:指针

package mainimport "fmt"//有一定编程经验的小伙伴肯定知道,n自加了一,但是调用者的变量并不会自加
func it(n int) {n++
}//这里我们用一个交换两变量值的小例子来介绍指针
func swap(x, y *int) {//交换两变量的值,注意!//这里我们用到了指针操作,意味着我们直接操作了内存地址//如果不用指针,传进来的值只是副本,所以并不会改变调用者的变量t := *x*x = *y*y = t
}func main() {n := 0it(n)//这里输出n以后,n的变量依然为0fmt.Println(n)x := 11y := 55fmt.Printf("交换前--> x:%d y:%d \n", x, y)//&符号用于取变量的地址swap(&x, &y)fmt.Printf("交换后--> x:%d y:%d \n", x, y)
}
PS D:\go\src\project_one> go run .\main.go
0
交换前--> x:11 y:55
交换后--> x:55 y:11

下面我们介绍自定义数据类型以及结构体

package mainimport "fmt"//用 type 关键字可以自定义数据类型
type myFloat float64/*
用如下形式来定义结构体
结构体是一种复合数据类型,可以把许多类型复合到一起
type 结构体名 struct{}*///下面我们创建一个 person 类型的结构体
type person struct {name stringage  int
}//用自定义类型的好处就是,可以给自定义类型创建方法
/*
func (变量名 类型名)方法名()[返回值]{方法体...
}
*/
func (p person) showInfo() {fmt.Printf("%s的年龄是:%d\n", p.name, p.age)
}func main() {//当然,自定义数据类型并不仅仅于此var f myFloatf = 777.77fmt.Println(f)//声明一个结构体变量p1 := person{name: "ekko",age:  18,}fmt.Printf("%#v\n", p1)p2 := person{name: "fengnoi",age:  19,}//直接用对应方法来打印信息p2.showInfo()
}
PS D:\go\src\project_one> go run .\main.go
777.77
main.person{name:"ekko", age:18}
fengnoi的年龄是:19

结语:当然,go语言的精髓在于并发处理,但我相信这些基础知识足够读者用来刷题或者写一些简单的小项目了。

最后送大家一句话:

一文带你入门go语言相关推荐

  1. 一文带你入门flink sql

    文章目录 一文带你入门flink sql 写在前面 环境准备 正文 遇到的一些问题 错误一 错误二 错误三 一文带你入门flink sql 写在前面 本次实战主要是通过Flink SQL Client ...

  2. java etl工具_一文带你入门ETL工具-datax的简单使用

    什么是ETL? ETL负责将分布的.异构数据源中的数据如关系数据.平面数据文件等抽取到临时中间层后进行清洗.转换.集成,最后加载到数据仓库或数据集市中,成为联机分析处理.数据挖掘的基础. ETL是数据 ...

  3. 万字带你入门Go语言(建议收藏)

    go语言入门 1.Go语言第一个程序HelloWorld 2.数据类型 3.基本数据类型 3.1变量的定义 3.2 变量定义时没用初始化 3.3 变量定义时没有指定这个变量类型 3.4 使用:=定义变 ...

  4. 一文带你入门Redis

    文章目录 1 课程安排 2 课程目标 3 redis介绍 3.1 什么是NoSQL 3.2 redis历史发展 3.3 什么是redis 3.4 redis的应用场景 4 测试环境 4.1 虚拟机 4 ...

  5. 一文带你入门目前大热的图神经网络

    点击我爱计算机视觉标星,更快获取CVML新技术 深度学习一直都是被几大经典模型给统治着,如CNN.RNN等等,它们无论再计算机视觉CV还是自然语言处理NLP领域都取得了优异的效果. 针对CV领域,图像 ...

  6. 一文带你入门C++,类与对象、6个默认成员函数、this指针以及static关键字。

    C++98关键字:63个 一.命名空间规则(namespace) 1.命名空间可以解决函数.全局变量名重复的问题,包在不同的命名空间里的重复函数,实际就是两个完全无关的函数. 2.命名空间允许续嵌套: ...

  7. 二十万字带你入门C语言-史上最强C语言教程(汇总篇)

    一.前言 至此,史上最强C语言教程系列已经全部完成,今天是给大家来做一个汇总,笔者目前已经完成了C语言阶段的学习,一直以来感谢大家的陪伴与支持,笔者后续还会继续更新C++.数据结构.Linux.Mys ...

  8. 【OpenCV教程】一文带你入门和精通OpenCV(C/C++)

    文章目录(OpenCV版本4.6.0) 1.数据类型 2.矩阵基本操作 2.1 全零矩阵 2.2 全一矩阵 2.3 单位矩阵 2.4 矩阵转置 2.5 求逆矩阵 2.6 逗号式分隔创建矩阵,常用于自定 ...

  9. 一文带你入门 SQL

      同学们可以结合本人的另外一篇博客,结合着使用~   使用 SQL 实战处理2020国赛C题数据 1. SQL 简介 ​ SQL (Structured Query Language:结构化查询语言 ...

最新文章

  1. mysql 释放错误连接_JSP连接MySQL后数据库链接释放的错误
  2. 把偷快递的贼炸到怀疑人生!不愧是 NASA 工程师,奇思妙想
  3. OGG 跳过事务(转)
  4. 深入理解和使用Oracle中with as语句以及与增删改查的结合使用
  5. 网工路由基础(4)EIGRP协议
  6. iOS高仿城觅应用客户端项目(开发思路和代码)
  7. Angular里ngModel双向绑定的一个使用例子
  8. c++调用求平方根函数_如何使用java语言求一个正整数的平方根?(不使用库函数)...
  9. 算法与数据结构题目汇总
  10. 数据库审计产品购买者指南
  11. 《不要做浮躁的嵌入式工程师》观后感
  12. 使用Prometheus监控kubernetes集群
  13. PHP移动互联网开发笔记(6)——MySQL数据库基础回想
  14. newifi3刷什么固件最稳定_新路由三无线路由器刷什么固件好?
  15. 如何给下属布置工作?多人团队便签来帮你有效布置任务
  16. 读文章《新阶级论:寒门难贵,豪门难收》
  17. 1元课,学会小学数学应用题,你的孩子也能秒解“鸡兔同笼”
  18. 微信计步器怎么不计步_微信运动不计步数是怎么回事?
  19. win10更新后应用无法连接服务器,win10更新无法连接到更新服务怎么办_win10无法连接到更新服务的解决方法...
  20. order statistics(找最ith小数值)问题

热门文章

  1. (二)理解word2vec:实践篇
  2. 写一个框架的详细步骤
  3. eureka 手动删除失效的服务
  4. 计算机论文参考文献最新年份,参考文献时间格式
  5. lpk提权-----dll注入
  6. 什么软件支持什么格式
  7. RockyLinux9.0系统在VMware虚拟机上【保姆级】安装步骤,并修改网络配置,使用固定IP进行SSH连接【47张过程图】
  8. sap服务器迁移性能问题,专家详解SAP数据迁移的六个方法
  9. 2018年 中南大学研究生复试机试题(1025~ 1028)
  10. CCNA思科的一些基础知识