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下直接选择安装包安装即可。

https://golang.google.cn/dl/

一路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可执行文件,然后运行显示

  1. go build 包名 用于测试编译包,在项目目录下生成可执行文件,如果直接在当前包的路径下就可以省略报名,默认生成一个以包命名的可执行文件(如果有可执行文件,之后生成pkg包保存其他库和工具)(go build -o Hello.exe 指定名字,则会在包下面生成可执行文件)注意报下面只能由一个主入口!当然除非你选择直接编译单文件。
  2. go install 这个配合build命令使用(也可以不配合,直接go install 直接生成两个包pkg 和 bin),主要目的是将可执行文件生成在bin目录下
  3. go get 直接参考 wget或者pip你就知道这是啥了,只是比较特殊的是,那个第三方库一般是在GitHub上面放的。
  4. 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急速入门系列的主要内容,如果未能解决你的问题,请参考以下文章

UML急速入门

GO语言的实战学习(猜谜游戏和在线词典)| 青训营笔记

kafka急速入门与核心API解析

Go 系列教程 —— 17. 方法

Go 语言网络编程系列— Socket 编程入门:Dial 函数及其使用

急速开发系列——Retrofit中如何正确的使用https?