GO语言基础语法
Go 语言的基础组成有以下几个部分:
-
包声明
-
引入包
-
函数
-
变量
-
语句 & 表达式
-
注释
-
package main
import "fmt"
func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!") }
首先,应该导入fmt包, fmt 包实现了格式化 IO(输入/输出)的函数。func main()
s是程序开始执行接口 /* */表示注解 这点和c++一样
基本变量和常量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用 var 关键字。
第一种,指定变量类型,如果没有初始化,则变量默认为零值
var b int
var c bool
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
第二种,根据值自行判定变量类型。
var d = true
第三种,如果变量已经使用 var 声明过了,再使用 *:=* 声明变量,就产生编译错误,格式:
intVal := 1 ==>var intVal int intVal =1
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
- 显式类型定义:
const b string = "abc" - 隐式类型定义:
const b = "abc"
基本数据类型
| 1 | 布尔型 |
|---|---|
| 值只能为true 或 false | var a bool = true var b = true c := true |
| 2 | 数字类型 |
|---|---|
| 浮点型 | float32 IEEE-754 32位浮点型数 float64IEEE-754 64位浮点型数 complex64 32 位实数和虚数 **complex128 ** 64 位实数和虚数 |
| 整型 | int8 有符号 8 位整型 (-128 到 127) uint8无符号 8 位整型 (0 到 255) int16有符号 16 位整型 (-32768 到 32767) uint16无符号 16 位整型 (0 到 65535) int32有符号 32 位整型 (-2147483648 到 2147483647) uint32无符号 32 位整型 (0 到 4294967295) int64有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) uint64无符号 64 位整型 (0 到 18446744073709551615) |
| 3 | 字符串类型 |
|---|---|
| 一串固定长度的字符连接起来的字符序列。 Go 的字符串是由单个字节连接起来的。 Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。 | var d = "hello" e := "hello" |
| 4 | 派生类型: |
|---|---|
| (a) 指针类型(Pointer) (b) 数组类型 (c) 结构化类型(struct) (d) Channel 类型 (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型 | 后面列举 |
声明数组
var array[size] datatype
array为数组名 size为大小 datatype 为数据类型
初始化数组
var numbers [5] int 默认值都为0
var numbers=[5]int{1,2,3,4,5}
numbers :=[5]int {1,2,3,4,5}这是Go语言特别的初始化方式
如果数组长度不确定,可以用...代替数组长度
numbers :=[...]int {1,2,3,4,5}
指针
一个指针变量指向了一个值的内存地址
var p *int var p *float32
这点和c++很像
指针使用
var a int=20
var p*int
p=&a p是指向a的地址,*p是a的值
空指针
当一个指针被定义后没有分配到任何变量时,它的值为 nil,也称为空指针。
nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值
结构体
格式:type structname struct{...
member defination
} 和其他语言一样定义使用
Map(集合)
Map 是一种无序的键值对的集合。和java中hashmap一样
Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。若不存在,则返回零值
创建map
m := map[string]int{ "apple": 1, "banana": 2, "orange": 3, }
获取元素
v1 := m["apple"] v2, ok := m["pear"] 如果键不存在,ok 的值为 false,v2 的值为该类型的零值
获取 Map 的长度:len := len(m)
删除元素:delete(m, "banana")
遍历 Map:for k, v := range m { fmt.Printf("key=%s, value=%d\n", k, v) }
切片
make([]T, length, capacity) 创建切片
len() 和 cap() 函数 len获取长度 cap获取切片最大长度
append() 和 copy() 函数 append追加 copy复制
var numbers []int
numbers = append(numbers, 1)追加
numbers1 := make([]int, len(numbers), (cap(numbers))*2)
copy(numbers1,numbers) 拷贝
函数
func name(){
函数体...
}
Range关键字
可以对数组,集合,切片等进行遍历 作为简单操作
for key, value := range oldMap { newMap[key] = value }
其中value是oldmap中的值
key初始值为0
类型转换
Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。
强制类型转换的基本语法如下:
T(表达式)
其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等.
比如计算直角三角形的斜边长时使用math包的Sqrt()函数,该函数接收的是float64类型的参数,而变量a和b都是int类型的,这个时候就需要将a和b强制类型转换为float64类型。
func sqrtDemo() {
var a, b = 3, 4
var c int
// math.Sqrt()接收的参数是float64类型,需要强制转换
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c)
}
大致写了一点基础语法,后面的到时候会写。