内容简介:Go语言的基础组成有一下几个部分:例子:数据类型用于声明函数和变量。
一、 GO 语言结构
Go语言的基础组成有一下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句和表达式
- 注释
例子:
//定义包名
package main
//引入fmt包
import "fmt"
//定义函数, main为入口函数
func main() {
/* 这是我的第一个简单的程序,我是注释 */
fmt.Println("Hello, World!")
}
二、Go基础语法
- 行分隔符:一行代表一个语句结束,无需;号结尾
- 注释:单行//,多行/**/
- 标识符关键字:标识符用来命名变量、类型等程序实体,第一个字符必须是字母或下划线而不能是数字
- 关键字: 25 个关键字或保留字
36 个预定义标识符
- 空格:声明必须使用空格隔开,变量与运算符间加入空格,程序看起来更加美观
1.数据类型
数据类型用于声明函数和变量。
数据类型的出现是为了 把数据分成所需内存大小不同的数据 ,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
Go按类别划分有以下集中数据类型:
- 布尔型(BOOL)
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
- 数字类型
整型 int 和浮点型 float32、float64.
整型包含:
浮点型:
其他数字类型
- 字符串类型
字符串就是一串固定长度的字符连接起来的字符序列。
Go 的字符串是由单个字节连接起来的,字节使用 UTF-8 编码标识 Unicode 文本。
- 派生类型
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- Channel类型
- 函数类型
- 切片类型
- 接口类型(interface)
- Map类型
2.变量
变量名由字母、数字、下划线组成,其中首个字符不能为数字
申明变量的三种格式:
- 指定变量类型,声明后若不赋值,使用默认值
var v_name v_type v_name = value
- 根据值自行判定变量类型: var v_name = value
- 省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误
v_name := value 例如 x := 10
多变量声明
var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3 //和 python 很像,不需要显示声明类型,自动推断 var vname1, vname2, vname3 = v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误 vname1, vname2, vname3 := v1, v2, v3 // 这种因式分解关键字的写法一般用于声明全局变量 var ( vname1 v_type1 vname2 v_type2 )
局部变量声明后如果没有使用编译时会报错。
3.常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
- 定义常量的格式:
const identifier [type] = value
- 显式类型定义: const b string = "abc" - 隐式类型定义: const b = "abc" 例如 const LENGTH int = 10 const WIDTH = 10
- 常量可以用作枚举,例如:
const (
Unknown = 0
Female = 1
Male = 2
)
- 常量可以用函数(必须是内置函数)计算表达式的值,例如len(), cap(), unsafe.Sizeof()等函数。
package main
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){
println(a, b, c)
}
-
iota常量
特殊常量,可以认为是一个可以被编译器修改的常量
iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的 行索引 )
用作枚举值:
const (
a = iota //0
b = iota //1
c = iota //2
)
可简写
const (
a = iota
b
c
)
4.运算符
-
算术运算符
假定 A 值为 10,B 值为 20
-
关系运算符
假定 A 值为 10,B 值为 20。
-
逻辑运算符
假定 A 值为 True,B 值为 False
-
位运算符
位运算符对整数在内存中的二进制位进行操作,假定 A 为60,B 为13
注意右移n位时除以2的n次方对负数无效。
下表列出了位运算符 &, |, 和 ^ 的计算:
假定 A = 60; B = 13; 其二进制数转换为:
-
赋值运算符
-
其他运算符
package main import "fmt" func main() { var a int = 4 var b int32 var c float32 var ptr *int /* 运算符实例 */ fmt.Printf("第 1 行 - a 变量类型为 = %T\n", a ); fmt.Printf("第 2 行 - b 变量类型为 = %T\n", b ); fmt.Printf("第 3 行 - c 变量类型为 = %T\n", c ); /* & 和 * 运算符实例 */ ptr = &a /* 'ptr' 包含了 'a' 变量的地址 */ fmt.Printf("a 的值为 %d\n", a); fmt.Printf("*ptr 为 %d\n", *ptr); } -
优先级
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右.下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低
可以通过使用括号来临时提升某个表达式的整体运算优先级
5.条件语句
条件语句的结构:
GO提供以下条件判断语句
if…else, switch例句
if a < 20 {
/* 如果条件为 true 则执行以下语句 */
fmt.Printf("a 小于 20\n" );
} else {
/* 如果条件为 false 则执行以下语句 */
fmt.Printf("a 不小于 20\n" );
}
switch {
case grade == "A" :
fmt.Printf("优秀!\n" )
case grade == "B", grade == "C" :
fmt.Printf("良好\n" )
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。
select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。
6.循环语句
循环程序的流程图
for在go语言中3种形式
- for init; condition; post { }
- for condition { }
- for { }
init: 一般为赋值表达式,给控制变量赋初值;
condition: 关系表达式或逻辑表达式,循环控制条件;
post: 一般为赋值表达式,给控制变量增量或减量。
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
for使用实例:
package main
import "fmt"
func main() {
var b int = 15
var a int
numbers := [6]int{1, 2, 3, 5}
/* for 循环 */
for a := 0; a < 10; a++ {
fmt.Printf("a 的值为: %d\n", a)
}
for a < b {
a++
fmt.Printf("a 的值为: %d\n", a)
}
for i,x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}
}
7.函数
函数是基本的代码块,用于执行一个任务,go程序最少有一个main()函数
- 函数定义:
func function_name( [parameter list] ) [return_types] {
函数体
}
func:函数由 func 开始声明
function_name:函数名称,函数名和参数列表一起构成了函数签名。
parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
函数体:函数定义的代码集合。
实例:
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
- 函数调用、返回多值
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Mahesh", "Kumar")
fmt.Println(a, b)
}
赞赏那是不存在的~
支付宝
微信
以上所述就是小编给大家介绍的《Go语言学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- GO语言学习笔记(四)GO语言控制语句
- GO语言学习笔记(一)Go语言的初步了解
- GO语言学习笔记(五)GO语言函数的简易计算
- 【Go语言学习】Linux下Go语言的安装与设置
- Go语言学习笔记02--go语言运算符与流程控制分支语句
- go语言学习
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithms
Alfred V. Aho、Jeffrey D. Ullman、John E. Hopcroft / Addison Wesley / 1983-1-11 / USD 74.20
The authors' treatment of data structures in Data Structures and Algorithms is unified by an informal notion of "abstract data types," allowing readers to compare different implementations of the same......一起来看看 《Data Structures and Algorithms》 这本书的介绍吧!