GO——开发环境的搭建、变量、常量和数据类型

本文内容只适合有其他编程语言基础的同学,不适合小白。

一、GO 语言介绍

Go 也叫做 Golang,是Google公司2009年11月正式对外公开的一门编程语言。它是静态强类型编译型语言。

优点:

  • 跨平台;
  • 有垃圾回收机制;
  • 支持面向对象和面向过程;
  • 并发性好;
  • 性能高;
  • 易于学习。

应用领域:

  • 服务器编程。
  • 分布式系统。
  • 网络编程(目前应用最广)。
  • 云平台。
  • 区块链。

很多重要的开源项目都是使用Go语言开发的,比如 Docker 、 Kubernetes等。

二、开发环境搭建

2.1 安装(Ubuntu)

  1. 到官网下载压缩包:传送门

  2. 删除 /user/local/go ,然后解压压缩包到 /user/local/go:

    sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf 压缩包名称
    
  3. 添加 /usr/local/go 路径到环境变量:

    echo export PATH=$PATH:/usr/local/go/bin >> ~/.profile
    
  4. 重新加载 ~/.profile:

    source ~/.profile
    
  5. 测试安装:

    go version
    

2.2 Go 模块代理

Go 1.13 及以上版本执行下面两条命令即可:

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

其他版本请参考自行搜索使用。

二、Hello,world!

2.1 go 命令

  • go env:用于打印Go语言的环境信息。其中,重要的有以下几条:
    • GO111MODULE=“on”:是否已经打开 MOUDLE 模式,on 是已打开、off 是已关闭。
    • GOPATH="/home/hugh/go":go 项目的存放路径。
    • GOROOT="/usr/local/go":go 的安装路径 。
  • go run:编译并运行命令源码文件。
  • go get:从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。
  • go build:编译指定的源码文件及它们的依赖包。
  • go install:编译并安装指定的代码包及它们的依赖包。
  • go clean:删除掉执行其它命令时产生的一些文件和目录。
  • go test:对Go语言编写的程序进行测试。
  • go list:列出指定的代码包的信息。
  • go fix:把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。
  • go tool pprof:交互式的访问概要文件的内容。

2.2 注释

// 单行注释

/*
多行注释
多行注释
多行注释
*/

2.3 Hello,world!

新建一个 hello.go 文件:

package main    // 声明包名,每一个 go 文件都属于某个包

import "fmt"    // 导入内置包

func main() {    // 程序入口:main 包下的 main 函数
	fmt.Println("你好,世界!")    // 等同于 python 的 print
}

注意!所有编译型语言的项目,都必须有一个程序入口,go 语言项目的程序入口是程main 包下的 main 函数

先编译后执行:

go build hello.go
# 在 linux 下生成 hello 可执行文件
# 在 windows 下生成 hello.exe 可执行文件
./hello
# 你好,世界!

或者,直接编译运行:

go run ./hello.go
# 你好,世界!

三、变量

  • 定义变量:

    // 关键字var 变量名 变量类型
    var name string
    
  • 定义变量并赋值:

    // 第一种:关键字var 变量名 变量类型 = 值
    var name string = "hugh"
    
    // 第二种:关键字var 变量名 = 值
    var name = "hugh"
    
    // 第三种(推荐):变量名 := 值
    name := "hugh"
    
    // 其他
    var width, height int = 100, 50
    var width, height = 100, 50
    var width, name int = 100, "hugh"
    width, name := 100, "hugh"
    var (
        name = "hugh"
        age int = 17
        height int
        // 没有 width := 100 
    )
    

    注意事项,变量一旦被定义:

    • 必须被使用,否则会报错
    • 变量类型就不能再被更改
    • 不能再被重复定义
  • 打印变量类型:

    fmt.Printf("%T\n", 变量名称)
    
  • 标识符命名规范:

    Go语言中的标识符命名,都遵循一个简单的命名规则:必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线

    • go 语言是大小写敏感的。

    • 关键字和保留字都不建议用作变量名。

    • 变量和结构体的命名建议使用驼峰命名法。

    • go 文件的命名建议使用下划线命名法。

    • package 的名称和目录保持一致,应该为小写单词,不要使用下划线或者混合大小写。

    • 常量命名全部使用大写字母,用下划线分词。

四、基本数据类型

类型长度(字节)默认值说明
bool1false布尔型
int, uint4或80整型,32 或 64 位,与机器的位数一致。uint 是无符号整型,只能表示正数,下面的同理。
int8, uint810整型,范围:-128 ~ 127, 0 ~ 255
int16, uint1620整型,范围:-32768 ~ 32767, 0 ~ 65535
int32, uint3240整型,范围:-21亿~ 21亿, 0 ~ 42亿
int64, uint6480整型,范围:大得很
byte10整型,uint8 的别名
rune40整型,int32 的别名
float3240.032位浮点型
float6480.064位浮点型
complex64864位复数
complex12816128位复数
string“”UTF-8字符串

4.1 整型

整型分为以下两个大类

  • 有符号整型:int8int16int32int64
  • 无符号整型:uint8uint16uint32uint64

4.2 浮点型

Go语言支持两种浮点型数:float32float64。这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64

4.3 复数类型

复数有实部和虚部,比如“5+7i”,complex64的实部和虚部为32位,complex128的实部和虚部为64位。

4.4 布尔类型

Go 语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)false(假)两个值。

注意:

  • 布尔类型变量的默认值为false。
  • Go 语言中不允许将整型强制转换为布尔型。
  • 布尔型无法参与数值运算,也无法与其他类型进行转换

4.5 字符串类型

Go 语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号"中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:

s1 := "hello"
s2 := "你好"

4.5.1 字符串转义符

转义含义
\r回车符(返回行首)
\n换行符(直接跳到下一行的同列位置)
\t制表符
单引号
"双引号
\反斜杠

4.5.2 多行字符串

Go语言中要定义一个多行字符串时,就必须使用反引号字符

s1 := `第一行
第二行
第三行
`

反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出

4.6 byte 和 rune 类型

字符用单引号'包裹,如:

var a := '中'

var b := 'x'

Go 语言的字符有以下两种:

  • byte 类型,或者叫 uint8 类型,代表了一个 ASCII 字符。
  • rune 类型,或者叫 int32 类型,代表一个 UTF-8 字符。

**当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。**Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

// 遍历字符串
func traversalString() {
    s := "花城的博客"
    for i := 0; i < len(s); i++ {  // 按照 byte 遍历
        fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    for _, r := range s {  // 按照 rune 遍历
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
}

输出:

232(è) 138() 177(±) 229(å) 159() 231(ç) 154() 132(
                                                  ) 229(å) 141() 154() 229(å) 174(®) 162(¢) 
33457(花) 22478(城) 30340(的) 21338(博) 23458(客) 

因为 UTF-8 编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。

五、常量的定义

// const 常量名 常量类型 = 值
const PI float32 = 3.1415926535

// const 常量名 = 值
const PI = 3.1415926535

// 其他方式
const PI, E float32 = 3.1415926, 2.7182818
const (
    PI = 3.1415926
    E = 2.7182818
)

常量不允许修改,否则会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值