文章目录
Hi,大家好,我是半亩花海。 入门 Go 语言,走近 Go 语言,体会 Go 语言的独特魅力。从基础语法和常用特性解析入手… 我们先从
Hello,World
变量、指针及赋值
选择和循环
基本数据类型
开淦,开肝,本文引自 CSDN 中 Go 语言入门指南:基础语法和常用特性解析_框住的博客-CSDN博客 的文章,让我们畅游在 Go 语言的海洋里吧,Go!
一、Hello,World
package main
import "fmt"
func main(){
fmt.Println("Hwllo,World!")
}
- 第1行是包的声明。本例中是main包,main包是每个项目的入口。
- 第3行,使用g键字import导入Go语言提供的标准包fmt。
- 第5行定义了一个函数,func是定义函数的关键字。
- 第6行使用fmt的Println函数输出字符串Hello,World!
注意: Go语言每行代码行尾是不需要加分号;
的,编译器会把换行符解析成分号,不能把函数的左扩号单独成行。
二、变量、指针及赋值
2.1 变量和常量
- 变量声明使用
var
关键字 - 常量声明使用
const
关键字 - 变量的定义形式:
var name 【类型】 = 【表达式】
注意: 使用过程中,"类型"和"表达式"可以省略一个,但不能同时省略。Go语言能进行自动推导,根据类型推默认表达式,也能根据表达式推出类型。
2.1.1 类型默认值
- 数字类型默认为
0
- 布尔类型默认为
false
- 字符串类型默认为
""
- 接口、slice、指针、map、通道、函数等类型默认值为
nil
2.1.2 变量定义示例
// 省略类型
var m = 2
// 省略表达式
var n int
// 多个变量一起声明
var a, b, c int
// 多个变量一同通过表达式声明
var i, j, k = 1, "hello", true
2.1.3 常量定义示例
常量的值是在程序编译的时候确定的,之后不可改变。
const LEN = 10
// 一次定义多个常量
const (
SYS = "Windows"
Type = "string"
)
2.1.4 :=
和 =
n1 := 10 // 正确
n2 = 10 // 错误
var n3 int
n3 = 10 // 正确
:=
是声明并赋值=
是给声明后的变量赋值
2.2 指针
- Go语言支持指针,指针的默认初始值为
nil
。
var int x
p := &x // & 为取地址符号。 p为指向x的整型指针
*p = 1
fmt.Println(x)
- Go也支持new函数
p := new(int)
2.3 赋值
- =为赋值符号。等号左边是变量名,等号右边是表达式。
- Go语言也提供了自增、自减和*=、+=等先运算后赋值的操作。
m := 1
m++ // 相当于 m = m + 1
m -= 1 // 相当于 m = m - 1
- Go同样支持多重赋值
m := 2
n := 3
m,n = n,m // 实现交换m,n的值
var a, b, c int // a, b, c 同时声明
a,b,c = 1,2,3 // a,b, c 同时赋值
三、选择和循环
3.1 选择
- Go语言也提供
if else
、switch
语句 - switch语句的每个
case
不需要额外的break
。
if expression == true {
fmt.Println("条件成立1")
}
if expression == false {
fmt.Println("条件成立2")
}
3.2 循环
- Go语言只提供
for
关键字,没有while
等其他关键字。
for形式
// 一般形式
for i := 0; i < 100; i++ {
}
// 相当于 while
for {
}
// 相当于 do ... while
for ok := true; ok; ok = expression{
}
// for循环也支持range函数
arr := []int{1, 2, 3, 4} // 定义切片slice,类似c的数组
for i, v : range arr{
fmt.Println("index: ",i, "value: ", v)
}
四、基本数据类型
4.1 整型
分 int8
、int8
、int6
、int32
分别对应8、16、32、64位整数。
整型的取值范围 整型分带符号整数和无符号整数。int
为带符号整型,uint
为无符号类型。
// 带符号整数
int8 (-128 ~ 127)
int16 (-32768 ~ 32767)
int32 (-2,147,483,648 ~ 2,147,483,647)
int64 (-9,233,372,036,854,775,808 ~ 9,233,372,036,854,775,807)
// 无符号整数
unit8 (0 ~ 255)
unit16 (0 ~ 65,535)
unit32 (0 ~ 4,294,967,295)
unit64 (0 ~ 18,446,744,073,709,551,615)
4.2 运算符
4.2.1 二元运算符
- 二元运算符包括算术运算、逻辑运算和比较运算
运算符优先级从上到下的递减顺序排列:
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||
- 同一优先级,使用左优先结合规则。
4.2.2 一元运算符
- 一元运算符包括正负号、bit位运算
& 与 AND
| 或 OR
^ 异或 XOR
&^ 位清空 (AND NOT)
<< 左移
>> 右移
- 左移
<<
:左移运算用零填充右边空缺的bit位 - 右移
>>
:无符号数右移运算用0填充左边空缺的bit位,有符号数的右移运算用符号位的值填充左边空缺的bit位。
4.3 浮点型
- 浮点型分
float32
和float64
。推荐使用float64
。 - float32表示小数可能会出现精度丢失。下面给出示例。
package main
import "fmt"
func main() {
var f1 float32 = 9.90
fmt.Println(f1*100)
var f2 float64 = 9.90
fmt.Println(f2*100)
}
/* output
989.99994
990
*/
4.4 复数和布尔类型
4.4.1 复数类型
- 复数分为
complex64
和complex128
,它们分别由float32
和float64
组成。 - 复数由实部和虚部组成,内置的
real
和imag
函数用于获取复数的实部和虚部。
var a complex128 = complex(2,3) // 2+3i
fmt.Println(real(a)) // 2
fmt.Println(imag(a)) // 3
4.4.2 布尔类型
- bool的值用true和false表示
- Go语言的布尔类型没有强制类型转换,无法把0转换成false
var b bool
b = 0 // 报错