golang学习一:Go语言开发环境,基础类型, fmt包的格式化输出输入,运算符
2023-09-27 14:29:29 时间
一、Go语言是什么:
快速开发与执行执行效率的平衡;
1. 优点:
- 上手难度低;
- 效率高: c的执行效率, python的开发效率;
- 社区;
- 天然并发;
2. GO适合用来做什么:
- 服务器编程;
- 分布式系统;
- 网络编程;
- 内存数据库;
- 云平台;
- 区块链:
二、Go语言开发环境:
1. 下载程序安装包:
2.安装环境:
- 双击安装包;
- 测试: cmd -> “go”;
3. 安装IDE:
- 使用vscode
- 使用GoLand IDE;
4. 第一个go程序:
// 1. go语言以包为单位
// 2. 每个文件必须生命包
// 3. 程序必须有一个main包
package main
import "fmt" // 导入系统包 标准输入输出包
// 入口函数
func main() {
fmt.Println("hello Go")
}
二、基础类型:
1. 变量:
- 在同一个{}中, 声明的变量是唯一;
- 变量一定是先声明, 再使用;
1.1 指定类型
语法:
// 方法1:
// var 变量名 变量类型
var a int // 默认值为: 0
var b, c int
// 方法2:
// var 变量名 变量类型 = 值
var d int = 10
1.2 类型推导:
// 根据赋值自动推导变量类型;
语法:
var a = 10;
// 海象赋值
// := 左边必须是没有使用过的变量名;
// 自动推导生成的变量不能再改变数据类型
b := 10
c, d, e := 20, 3.14, "hello"
1.3 Printf与Println的区别:
- Printf: 格式化输出:
- Println: 输出后换行;
func main() {
var a int = 10
fmt.Print(a) // 打印不换行
fmt.Printf("a = %T", a) // 不换行
fmt.Println("a =", a)
}
1.4多重复值与匿名变量:
两数交换:
i, j := 10, 20
i, j = j, i
fmt.Println(i, j)
匿名变量:
func fun1(){
return 1, 2
}
// _ 为匿名变量
tmp, _ = fun1()
1.5 多个变量:
语法:
var (
变量名 变量类型 = 值
变量名 变量类型 = 值
)
1.6 常量
语法:
const 变量名 变量类型 = 值
const (
变量名 变量类型 = 值
变量名 变量类型 = 值
)
2. iota枚举类型:
常量声明可以使用iota常量生成器初始化, 它用于生产一组以相似规则初始化的常量, 但是不用每行都写一遍初始化表达式;
- iota是一个常量生成器;
- 在一个const声明中, 在第一个声明的常量所在的行, iota将会被初始化为0, 然后在每一个有常量声明的行加1;
func main() {
const (
x = iota // x = 0
y = iota // y = 1
z = iota // z = 2
w // 这里隐式的w = iota, 因此w = 3
)
fmt.Println(x, y, z, w)
const u = iota // 每遇到一个const, iota就会重置, 此处u = 0
fmt.Println(u)
const (
h, i, j = iota, iota, iota // h = 0, i = 0, j = 0, iota在同一行, 值相同
)
fmt.Println(h, i, j)
}
3. 数据类型:
3.1 Go语言内置数据类型:
类型 | 名称 | 长度 | 零值 | 说明 |
---|---|---|---|---|
bool | 布尔类型 | 1 | false | 不可以用数字代表, 取值: [true, false] |
byte | 字节型 | 1 | 0 | uint8别名 |
rune | 字符类型 | 4 | 0 | 专用于存储unicode编码, 等价于unint32 |
int, uint | 整型 | 4或8 | 0 | 32位或64位 |
int, uint8 | 整型 | 1 | 0 | -120~127, 0~255 |
int16, uint16 | 整型 | 2 | 0 | -32768~32767, 0~65535 |
int32, uint32 | 整型 | 4 | 0 | -21亿~21亿, 0~42亿 |
int64, uint64 | 整型 | 8 | 0 | |
float32 | 浮点型 | 8 | 0.0 | 小数位精确到7位 |
float64 | 浮点型 | 8 | 0.0 | 小数位精确到15位 |
complex63 | 复数类型 | 8 | ||
complex128 | 复数类型 | 16 | ||
uintptr | 整型 | 4或8位 | 足以存储32位指针的uint32或uint64整数 | |
string | 字符串 | … | utf-8字符串 |
3.2 布尔类型:
…
3.3 整型:
注意有无符号的整型;
3.4 浮点类型:
…
3.5 字节类型:
- 单引号表示"字符", 双引号表示"字符串"
- 字符串末尾有\0, 是字符串结束的标志;
func main() {
var a byte = 'a'
fmt.Println(a) // 97
fmt.Printf("%T\n", a) // uint8
// %c是一个占位符, 表示打印输出一个字符
fmt.Printf("%c\n", 97) // a
// 输出ascii码
var b byte = '0'
fmt.Println(b) // 48
}
3.6 字符串:
func main() {
// 定义声明
var s1 string
s1 = "hello world"
// 自动推导
s2 := "你好, 世界"
fmt.Println(s2) // 你好, 世界
fmt.Printf("%T\n", s2) // string
// len函数: 计算字符串中字符的个数, 不包含 \0
// 在go语言中, 一个汉字占3个字符
fmt.Println(len(s1)) // 11
fmt.Println(len(s2)) // 14
// 字符穿拼接
s3 := s1 + s2
fmt.Println(s3) // hello world你好, 世界
}
3.7 字符与字符串的区别:
- 字符使用单引号; 字符串使用双引号;
- 字符都是一个字符; 字符串可以有多个字符组成;
- 字符串的每个字符都有下标, 从0开始, 获取的是字符;
func main() {
ch := 'a'
fmt.Println(ch) // 97
str := "hello world"
fmt.Println(str) // hello world
fmt.Println(str[1], str[5]) // 101 32
fmt.Printf("%c, %c\n", str[1], str[5]) // e,
}
3.8 复数类型:
func main() {
var fu complex64
fu = 2.1 + 3.14i
fmt.Println(fu) // (2.1+3.14i)
fu2 := 2.2 + 6.28i
fmt.Println(fu2) // (2.2+6.28i)
fmt.Printf("%T\n", fu2) // complex128: 默认推导的是128
// 通过内建函数获取"实部"和"虚部"
fmt.Println(real(fu2), imag(fu2)) // 2.2 6.28
}
三、fmt包的格式化输出输入:
1. 格式化说明
格式 | 含义 |
---|---|
%% | 一个%字面量 |
%b | 一个二进制整数值(基数为2), 或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c | 字符型. 可以个输入的数组按照ASCII码相应的转换为对应的字符 |
%d | 一个十进制数值(基数为10) |
%e | 以科学技术法e表示浮点数或复数; |
%E | 以科学计数法E表示浮点数或复数值; |
%f | 以标准计数法表示的浮点数或者复数 |
%g | 以%e或%f表示的浮点数或复数, 任何一个都以最为紧凑的方式输出 |
%G | 以%E或%f表示浮点数或复数, 任何一个都以最为紧凑的方式输出 |
%o | 一个以八进制表示的数字(基数为8) |
%p | 以十六进制(基数为16)表示的一个值的地址, 前缀为0x, 字母使用小写的a-f表示 |
%q | 使用Go语法以及必须时使用转义, 以双括号括起来的字符串后者字节切片[]byte, 或是以单引号括起来的数字; |
%s | 字符串. 输出字符串中的字符直至字符串中的空字符(字符串以’\0’结尾, 这个’\0’即空字符) |
%t | 以true或false输出布尔值 |
%T | 使用Go语法输出的值的类型 |
%U | 一个Unicode表示的整型码点, 默认值为4个数字字符 |
%v | 使用默认格式输出的内置或者自定义类型, 或者是使用其类型的String()方式输出的自定义值, 如果该方法存在的话 |
%x | 以十六进制表示的整型值, 数字a-f使用小写 |
%X | 以十六进制表示的整型值, 数字A-F使用大写 |
2. 输入:
func main() {
var a int
// 阻塞进程, 等待用户输入
// 格式化输入
fmt.Scanf("%d", &a)
fmt.Println(a)
}
四、类型转换与别名:
1. 类型转换:
在类型转换时建议将低类型转换成高类型, 保证数据的精度;
int8 --> int16 --> int32 --> int64
float32 --> float64
iny64 --> float64
2.类型别名:
type asname 类型名
type (
asname1 类型名
asname2 类型名
)
五、运算符:
1. 算数运算符:
运算符 | 术语 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模(取余) |
++ | 后自增, 没有前自增 |
– | 后自减, 没有前自减 |
2. 关系运算符:
结果是布尔值
运算符 | 术语 |
---|---|
== | 相等 |
!= | 不等 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
3. 逻辑运算符:
运算符 | 术语 |
---|---|
! | 非 |
&& | 与 |
|| | 或 |
4. 位运算符:
运算符 | 术语 | 说明 | 示例 |
---|---|---|---|
& | 按位与 | 参与运算的两数各对应的二进制相与 | 60 & 13 = 12 |
| | 按位或 | 参与运算的两数各对应的二进制相或 | 60 | 13 = 61 |
^ | 异或 | 参与运算的两数各对应的二进制相异或, 当两数对应的二进制向异时, 结果为1 | 60 ^ 13 = 240 |
<< | 左移 | 左移n位就是乘2的n次方. 左边丢弃, 右边补0 | 4 << 2 = 16 |
>> | 右移 | 右移n位就是除以2的n次方. 右边丢弃, 左边补位. | 4 >> 2 = 1 |
5. 赋值运算符:
6. 其他运算符:
运算符 | 说明 |
---|---|
& | 取地址 |
* | 取值运算符(指针) |
7. 运算符等级:
相关文章
- go语言中goroute使用:=遇到的坑
- Go实战(二)-变量、语句、函数、指针、关键字
- Go实战抢红包系统(四) - 基础实施层coding
- Go基础---->go的基础学习(五)
- Go基础---->go的基础学习(三)
- Go 语言指针作为函数参数
- go build 使用
- Go语言HTTP Server源码分析
- 苹果官网罕见打折,iPhone13全系优惠600元;国际象棋机器人弄伤对弈儿童手指;国内Go语言爱好者发起新编程语言|极客头条
- 0098-Go-通道
- Golang基础(5):Go语言反射规则
- Golang基础(4):Go结构体
- 【GoLang】golang 微服务框架 go-kit
- Go语言基础之接口
- 前端工程师学习go语言第一弹——基础篇
- GO_11:GO语言基础之并发concurrency
- GO_08:GO语言基础之interface
- GO_07:GO语言基础之method
- Go学习笔记之基础数据类型
- Go语言入门之切片的概念
- go 写 TCP 服务端/客户端 基础 :goland 学习小进阶:增加 JSON 配置文件(3)
- go build命令详解
- Go语言的指针的一些测试
- Go语言用mock server模拟调用(httptest)