Go语言介绍与环境搭建与变量、常量、基本数据类型

Go语言介绍与环境搭建与变量、常量、基本数据类型

1. Go语言介绍

 1、Google公司出的,诞生于 2009年,10年的时间,非常新的语言,天然支持并发,很新,生态不完善(轮子少 beego、gin)

-python:1989年
-java:1990年
-2005年,之前的语言,对并发支持不是特别好

2、Go是静态强类型语言,编译型语言:

  • 强类型语言:不允许不同类型的数据进行运算
  • 弱类型语言:允许不同类型数据进行运算

3、有垃圾回收机制

4、支持面向对象和面向过程的编程模式(go不是一个纯粹的面向对象语言,面向对象的特性它都有:继承,封装,多态)

5、2009年推出 12年稳点版本 1.5——实现的架构变化,同时保留了和旧版本的兼容性,以后的go,完全实现了go自己写的

2020年 1.14版本 ---》规划:go 2.0以后,会有大更新:支持泛型,异常处理

6、go语言为什么火:docker火,谷歌(k8s),区块链(第一款开源的区块链项目,用go写的),国内互联网公司爱用,性能高,语法简介,上手快,go特别适合服务端开发(微服务的开发)

2. go语言环境搭建

1. 安装环境

go开发包:https://golang.google.cn/dl/

IDE工具:golang(推荐使用),vscode,sublime text

golang:跟pycharm 90%相似,jetbrains公司,idea,用来开发java的,phpstorm,pycharm,goland

go安装完成后:

# go version 查看go的版本

# go env    查看go的环境变量
GO111MODULE= # 没有值或者off,表示没有开启go mode模式,用的就是gopath模式
GOROOT=c:\go  # go开发包的安装路径,确认好是否对
GOPATH=C:\Users\Administrator\go # 代码存放路径,确认好是否对,以后你的go代码都放在这个文件夹下

# 在任意位置敲go,都有这个命令,需要把 c:\go\bin加入环境变量

# go mode模式:代码可以放在任意路径

GOROOT和GOPATH

GOROOTGOPATH都是环境变量,其中GOROOT是我们安装go开发包的路径,而从Go 1.8版本开始,Go开发包在安装完成后会为GOPATH设置一个默认目录,并且在Go1.14及之后的版本中启用了Go Module模式之后,不一定非要将代码写到GOPATH目录下,所以也就不需要我们再自己配置GOPATH了,使用默认的即可。

GOPROXY 非常重要

Go1.14版本之后,都推荐使用go mod模式来管理依赖环境了,也不再强制我们把代码必须写在GOPATH下面的src目录了,你可以在你电脑的任意位置编写go代码。(网上有些教程适用于1.11版本之前。)

默认GoPROXY配置是:GOPROXY=https://proxy.golang.org,direct,由于国内访问不到https://proxy.golang.org,所以我们需要换一个PROXY,这里推荐使用https://goproxy.iohttps://goproxy.cn

可以执行下面的命令修改GOPROXY:

go env -w GOPROXY=https://goproxy.cn,direct

  

2. 新建项目

1. 没有使用go module模式,不管是使用golang还是其他的IDE工具新建项目如果没有开启GO111MODULE都需要将代码路径放在GOPATH路径下的src文件夹中(如果没有就手动创建)

gopath路径下会有三个文件夹:src(放代码的),pkg(编译过程产生中间的东西),bin(编译后的可执行文件)

2. 使用go module模式新建项目时,我们需要通过 go mod init 项目名 命令对项目进行初始化,该命令会在项目根目录下生成go.mod文件。例如,我们使用hello作为我们第一个Go项目的名称,执行如下命令。

go mod init hello

  

3. 执行代码

编译型语言都是先编译再执行(golang中直接右键run即可)

编译:go build xx.go      --->编译成当前平台下的可执行文件,名字为xx.exe

执行:Mac下./xx          Windows下直接在可执行文件的路径下:ww.exe

4. 常见命令

go build 编译

go install 安装,把编译好的可执行文件放到bin目录下

go fmt  代码格式化

go run xx.go

5. 注释

// go语言中的单行注释使用
/*
多行注释
多行注释
*/

ctrl+/ 可以快速注释,解注释(goland中)

6. 入口函数

package main  //表示声明main包,每一个go代码的第一行必须写这个


import "fmt"   //导入fmt包    类比python中import os os.path

func main() {  //声明main函数  函数体的内容,放到大括号中
    //goland提示的a... 形参是a
    fmt.Println("hello world")   //在控制台输出helloworld --->  print("hello world")
    fmt.Println("hello world")

}

程序的入口就是main包下的main函数,编译型语言都有入口,一个go项目只能有一个main函数

3. 变量的定义和使用

go中的变量和python中的变量在内存中的存储是不一样的

python中一切皆对象,都是变量名 -> 内存地址 -> 变量值

go中是变量名 -> 变量值因此,go中定义的变量不能重复定义

用关键字:var

变量定义有三种方式,并且定义了的变量就必须要使用,如果不使用就会报错

注意:

1 变量定义了,必须使用,否则报错
2 包导入了,要使用,不使用就报错
3 先定义再使用
4 不能重复定义
5 类型固定

package main

func main() {
    //1 方式一:基本定义
    //var关键字 变量名 变量类型 =变量值
    //var age int=18  //定义并赋值
    //var age int  //定义
    //age=18       //赋值

    //2 方式二:类型推导(不需要加类型了,并不代表没有类型,类型都是固定的)
    //var age =18
    //var age      //错误,变量定义时,就要固定类型
    //age=18

    //3 方式三:简略声明(冒号跟等号是一起的,推荐第三种)
    // age :=18
    //age   //更不对了
    //age=18

    //4 同时定义多个变量
    //var age,a,b,c int=18,19,20,21
    //var age,a,b,c =18,19,20,21
    //age,a,b,c :=18,19,20,21
    //变形(能看懂,表示在定义即可)
    //var (
    //    age=19
    //    name="lqz"
    //    sex="男"
    //)

    //5 变量要先定义再使用
    //a=19
    //a:=10

    //6 变量不能重复定义
    //var a int=18
    ////var a=19
    ////a:=19
    ////简略声明的小特殊(冒号前,至少有一个未定义的变量即可)
    //b,a:=17,18
    //
    //fmt.Println(a,b)

    //7 变量类型是固定的
    //var a int=18
    //var a=18 
    //a:=18
    //a=80
    //a="xxx"  //不可以
    //fmt.Println(a)


    //Printf%T表示类型
    //fmt.Printf("age的类型是:%T,值是:%d\n", age, age)
    //fmt.Println(age)

    /*
        注意:
        1 变量定义了,必须使用,否则报错
        2 包导入了,要使用,不使用就报错
        3 先定义再使用
        4 不能重复定义
        5 类型固定
    */

}

/*
在python中一切皆对象,对象就是个地址是引用
*/

4. 常量

常量:恒定不变的量,建议常量全用大写,go中常量定义后是不能改变的,python中只是约定俗成的

用关键字 const

并且常量定义了可以不使用,其他的和定义变量类似,但是不能用简略 :=

package main

func main() {
    //1 const关键字 常量名 常量类型 =值
  const key = "qwwqrew"
  const port int = 6379
    //2 常量可以定义了不使用
    //const age int =99

    //3 类型可以省略
    //const age  =99
    //fmt.Printf("%T",age)

    //4 同时定义多个常量
    //const (
    //    AGE=19
    //    NAME="lqz"
    //    sex="男"
    //)
    //fmt.Println(AGE)
    //
    ////5 改变常量(不允许)
    //AGE=199
    //fmt.Println(AGE)

}

5. 基本数据类型

1. 数字类型

 有符合整型:

int:在32位机器上是int32,在64位机器是int64
int8:8个bit,一个字节,正负2的7次方减1的范围
int16:正负2的15次方减1的范围
int32:正负2的31次方减1的范围
int16:正负2的63次方减1的范围

无符号整型(正整数):

unit8
unit16
uint32
uint64

浮点型:

float32
float64:精度64,更加精确

复数:

complex:实部与虚部

其他:

byte:uint8的别名

rune:  int32的别名

2. 字符串类型

 用双引号或者反引号表示,反引号可以换行,用双引号换行用 \n

如果双引号内如果有双引号,需要加 \ 转义

3. 布尔类型

 true 和 false(小写)

//布尔类型
    //var a bool =true
    //var a  =true
    //a  :=true
    //var b bool =false
    //fmt.Println(a)
    //fmt.Println(b)

4. 类型转换

 因为go是强类型语言,所有不同类型之间不能做运算,需要做类型转换

浮点型转成整型是将小数点后数全部舍弃

func main() {
    //float转成int类型,小数点后直接弃用,不是四舍五入
    var a int = 10
    var b float32=9.99999
    fmt.Println(a+int(b))  // 19

    // int和int64不是一个类型
    var c int64 = 20
    fmt.Println(a+int(c))
}

 跨平台执行文件,在一个平台编译后其他平台能直接使用

Windows中编写的go跨平台传到Linux中运行

1. 在xx.go所在的文件夹位置进入cmd执行以下命令:

set GOARCH=amd64
set GOOS=linux
go build xx.go

会生成一个没有后缀的xx二进制文件,将该文件上传的Linux系统中某个文件夹下

2. 赋予权限

chmod 777 xx

3. 执行

./xx

即可运行成功不需要go的任何依赖

 

posted @ 2020-04-20 17:59  Mr沈  阅读(231)  评论(0编辑  收藏  举报