Go 语言入门指南:基础语法和常用特性解析 (一)

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 elseswitch 语句
  • 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 整型

int8int8int6int32 分别对应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 浮点型

  • 浮点型分 float32float64。推荐使用 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 复数类型

  • 复数分为 complex64complex128 ,它们分别由 float32float64 组成。
  • 复数由实部和虚部组成,内置的 realimag 函数用于获取复数的实部和虚部。
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	// 报错
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

半亩花海

你的鼓励将是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值