Go急速入门系列
Posted HUTEROX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go急速入门系列相关的知识,希望对你有一定的参考价值。
文章目录
说明
本文档为本人的学习笔记,里面的内容并不适合纯零基础的朋友学习,建议至少掌握了python,java,至少会C语言的同学食用。
学习原因,小爷看上了 Iris 想玩玩,顺便为后面铺路
Go 环境
与python一样具备简便的语法,以及和C语言的无缝切换,支持协程(异步IO)
官网地址:
https://golang.org/
环境 IDEA 2021.2
插件 Go
插件安装
首先是IDEA版本是2021.2专业版,其他版本我确定是否由这个插件,当然也可以选择Vscode。
windows下直接选择安装包安装即可。
一路next,现在的最新版本为1.17.2,自动配置环境变量。
创建Go项目
之后进入设置
先看看我的目录结构
)]
.png)]
执行的时候就会把文件放到当前的项目下了。
Hello World
老规矩了,这是我的第三个主力语言,嘿嘿~~
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
这个熟悉Python的同学必然异常熟悉.
基本指令
首先运行Go语言程序由一下多种方式
1.go run Hello.go //这个会在默认的地方生成可执行文件例如生成exe可执行文件,然后运行显示
- go build 包名 用于测试编译包,在项目目录下生成可执行文件,如果直接在当前包的路径下就可以省略报名,默认生成一个以包命名的可执行文件(如果有可执行文件,之后生成pkg包保存其他库和工具)(go build -o Hello.exe 指定名字,则会在包下面生成可执行文件)注意报下面只能由一个主入口!当然除非你选择直接编译单文件。
- go install 这个配合build命令使用(也可以不配合,直接go install 直接生成两个包pkg 和 bin),主要目的是将可执行文件生成在bin目录下
- go get 直接参考 wget或者pip你就知道这是啥了,只是比较特殊的是,那个第三方库一般是在GitHub上面放的。
- go doc 这个是用了来查看说明文档的例如 go doc fmt 查看 fmt 或者 go doc fmt Println 查看 Println
基本语法快速入门
import&package
这个在python或者Java里面很常见,首先主要说明的是Package
这个 Package 大体上和Java的类似,但是区别是
package main
对于一个需要运行的程序入口它的包名必须是 main
Import
这个和python和java的都不太一样,当然和python更像(如果一定要比的话)
import "fmt"
//导包 or import ("fmt")
导入多个
import (
"fmt"
_ "database/sql"
)
此外还有三种导入方式
import (
. "fmt"
)
//等价于python,import module * 导入包下面的所以方法
import (
f "fmt"
)
//等价于python,import module as f 给包取个别名方便调用
import (
_ "fmt"
)
//导入包进行初始化
变量
这个在Go语言里面给我很不错的地方就是,GO作为一个静态语言尽然可以自动推断类型,也就是我可以这样干。
var age int //声明变量
age = 10 //给值
我也可以这样
var age = 10
这不就和py一样了
之后还有更加简便的写法
age :=20
但是这里值得注意的是Go有严格的规范,也就是如果你的变量声明了,但是没有被使用是会报错的!
此外如果你还觉得麻烦直接
var name,age="sb",20
or
var (
studentname = "xiaoming"
......
)
直接生成多个值
之后就是Go是支持指针的
package main
import "fmt"
func main() {
var age int
var agep *int
agep = &age
*agep = 10
fmt.Println(age)
fmt.Println(agep)
}
我直呼好家伙
注意点
1.变量必须先声明再使用
2.变量的类型和赋值类型必须一致
3.同一个作用域内,变量名不能重复
4.简短定义方式,左边的变量至少有一个必须是新的变量创建加赋值
5.简短定义方式不支持全局变量定义
6.变量具有默认值,老传统了,数一类是0 字符串是”“ 空字符,数组类型(切片在go里面叫) 是 nil 空
常量
常量定义 const name type
例如:
const NAME = "Huterox"
记住字母要大写,规范!这个和变量不同的是可以不被使用
之后这样写也是可以的
const name,age="sb",20
or
const (
studentname = "xiaoming"
......
)
iota
这个也是一个很好玩的玩意,可以自增的常量
package main
import "fmt"
func main(){
const(
a = iota
b = iota
c = iota
)
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
结果:
0 1 2
ETC…
那么到这里基本的变量就到这里,基本的数据类型,其实都类似,只是有些比较不一样的特性。
这里就不详细解释了(这也是为什么我一般不会去写基本教程的原因,最多做个小结,给有基础的人看看,要是写基本教程的话,直接去看官方文档)
这里有个特点就是,变量需要手动转型,因为Go是一个强类型的语言,但是,对于变量和常量那么就可以自动类型转换。
位运算
这个还是有必要再说说的,毕竟还是有点重要的,虽然你可能压根不用。
&:就是两个玩意必须为 1
| :只要有一个是 1就可为真
^ 异或:两个不一样就为1
这个分两种情况如果是 a ^ b 两个运算那就是看位,如果是 ^a只有一个,那么就是取反 0->1
1->0
位清空 &^
a&^b 如果在对应的位上,b上位0 那么就吧 a对应的位的值替换到b的那个位上面 如果位1 则取0
输入与输出(键盘)
输出,这个真没啥好说的。主要说说输入。
fmt.Scanln(&a)
or
fmt.Scanln(&a,&x)
或者
fmt.Scanf() 这个和C语言的类似
二者区别
Scanln()相当于
fmt.Scanf("%d %d",&a,&x)
此外使用
bufio也可以这个看名字就知道是和Java IO类似的玩意
条件语言
这个不写了,和 那谁一样
不过有一个比较特殊的玩法
if num :=20;num>10{
fmt.Println(num)
}
这个可以直接赋值好家伙!但是作用域只限于条件判断里面。
循环
这个就比较la了,go只支持for循环
for i :=0;i<5;i++ {
fmt.Printf("%d", i)
}
不要往for那边加括号
go to
这个玩意,懂得都懂,少用为妙
代码。。。。。。
标签:
代码。。。。。。
goto 标签
随机数生成
这个比python还简单
rand就可以实现
但是这里要个种子么
所以还是老规矩用时间作为种子
t1 := time.Now().UnixNano()
rand.Seed(t1)
intn := rand.Intn(10) //[0,10)
println(intn)
复合类型
这个就是看起来比较复杂一点的玩意,比如数组啥的,函数啥的
数组
var arr1 [4] int
var arr1 = [4] int{1,2,3,4} //要给值了
var arr1 = [...] int{1,2,3,4}//看后面长度
值得一提的是,这个在数组之间赋值 arr2 :=arr1(var arr2 = arr1)是值传递
二维数组
这个和C语言的很像,包括内存结构(毕竟有C血统)
a2 :=[3][4]{{},{},{}}
看到这里懂得都懂。
切片
这个其实说白了就是python里面的列表,Java里面的arryList
定义方式有三个
var s [] int
s : = make([] int,2,10) //默认2个参数,最大10,超过了自动扩容
s : = make([] int,2)
添加
s=append(s,1,2,3...)
这个可以加一个也可以加多个
s = append(s,s1...)
和一块
以上是关于Go急速入门系列的主要内容,如果未能解决你的问题,请参考以下文章