做分类信息网站赚钱吗,邹城住房城乡建设部网站,网站建设项目外包,云南网站建设哪家公司好包声明引入包函数变量语句表达式注释
package main//包声明import fmt//引入包
//函数
func main() {/* 这是我的第一个简单的程序 */fmt.Println(Hello, World!)
}基础语法
标记
go程序可以由多个标记组成#xff0c;可以是关键字#xff0…包声明引入包函数变量语句表达式注释
package main//包声明import fmt//引入包
//函数
func main() {/* 这是我的第一个简单的程序 */fmt.Println(Hello, World!)
}基础语法
标记
go程序可以由多个标记组成可以是关键字标识符常量字符串符号。
fmt.Println(Hello,World!)1. fmt
2. .
3. Println
4. (
5. Hello, World!
6. )
行分隔符
go程序中一行代表一个语句结束每个语句不需要在结尾以分号隔开但是如果要将多个语句写在一行那么必须分开。
注释
同Javac
//
/**/不多说
标识符
标识符基本同c字母数字下划线数字不能开头。
字符串连接
同java可以使用进行连接
关键字和保留字
breakdefaultfuncinterfaceselectcasedefergomapstructchanelsegotopackageswitchconstfallthroughifrangetypecontinueforimportreturnvar
预定义标识符
appendboolbytecapclosecomplexcomplex64complex128uint16copyfalsefloat32float64imagintint8int16uint32int32int64iotalenmakenewnilpanicuint64printprintlnrealrecoverstringtrueuintuint8uintptr
数据类型
布尔型只能为true或者false数字类型支持复数 intfloat32float64 字符串类型字符串类型就是一串固定长度的字符连接起来的字符序列。Go的字符串是单个字节拼接起来的。go的字符串的字节使用UTF-8编码标识Unicode文本派生类型 指针类型数组类型结构化类型Channel类型函数类型切片类型接口类型Map类型
数字类型
整型
uint8无符号 8 位整型uint16无符号 16 位整型uint32无符号 32 位整型uint64无符号 64 位整型int8有符号 8 位整型int16有符号 16 位整型int32有符号 32 位整型int64有符号 64 位整型uint无符号整型 至少32位int整型 至少32位uintptr等价于无符号64位整型但是专用于存放指针运算用于存放死的指针地址。
浮点型
float3232位浮点数float6464位浮点数
复数
complex12864位实数和虚数complex6432位实数和虚数
常量
常量只能是基本数据类型不能是
除基本类型以外的其它类型如结构体接口切片数组等函数的返回值
常量声明时需使用const关键字并且声明时必须指定值。
可以使用括号扣起来指定多个常量
const(Count 1Name lbd
)iota
iota是一个内置的常量标识符常用于表示一个常量中声明中无类型整数叙述一般都是在括号中使用。
ps我的理解感觉像是数学中的数列。
变量
声明
声明基本上和Javac一致。
写一点点区别吧。
var 变量名 类型名短变量声明 name : 1
条件控制
基本同Java一样
fallthrough关键字
可以执行swtich-case相邻的下一分支
循环控制
格式基本同Javacfor循环更加简洁直接取消了for的括号并且没有while循环for直接被当作while来使用。
for range
for range可以更加方便的遍历一些可迭代的数据结构如数组切片字符串映射表通道。
切片数组
数组在go中数组作为值类型不是引用数据类型。并且数组是定长的数据结构长度被指定之后不能修改而切片是不定长的在容量不够时会自动进行扩容。
数组
go中的数组是值类型不是和c一样是指向头部元素的指针。
初始化
数组在声明长度时长度只能是常量不能是变量
var a [10]int//错误样例len : 10
var b [len]int但是可以使用常量来进行长度的初始化。
当然使用元素初始化也可以同Javac一样。
访问
数组元素的访问和Java一样只要有数组名和下标就可以进行访问。
切割
切割数组的格式为
arr[startIndex:endIndex],区间为左闭右开
//数组在进行切割之后就会变成切片类型
fmt.Println(hello)var a [5]intfor i : 0; i 5; i {fmt.Scanf(%d, a[i])}fmt.Println(a)
输出
[5]int
[]int
切片
切片用于存放不知道长度的数据并且后续使用过程中可能会频繁插入数据和删除元素。
初始化
var nums []int // 值
nums : []int{1, 2, 3} // 值
nums : make([]int, 0, 0) // 值
nums : new([]int) // 指针
切片的底层实现实际上是数组但是切片是引用类型可以理解为指向底层数组的指针。
插入元素
切片元素的插入一般结合append函数使用
从头部插入元素中间下标i插入元素尾部插入元素
//头
nums append([]int{-1, 0}, nums…)
//中间下标i
nums append(nums[:i1], append([]int{0, 0}, nums[i1:]...)...)
//尾部
nums append(nums, 2, 3)删除元素
和插入元素一样都需要结合append函数使用
从头部删除n个元素从尾部删除n个元素从中间指定下标i位置开始删除n个元素删除所有元素
//- 从头部删除n个元素
nums nums[n:]
//- 从尾部删除n个元素
nums nums[:len(nunms) - n]
//- 从中间指定下标i位置开始删除n个元素
append(nums[:i], nums[i n]…)
//- 删除所有元素
nums nums[:0]字符串
字符串本质上是一个不可变的字节数组也是一片连续的内存空间。
并且字符串有两种字面量表达方式分为普通字符串和原生字符串。
普通字符串
普通字符串由双引号表示支持转义不支持多行书写。
原生字符串
原生字符串由反引号表示不支持转义支持多行书写原生字符串里面所有的字符都会原封不动的输出包括换行和缩进。
指针
go语言保留了指针但是为了保证安全又限制了指针的使用。
同c语言一样有取地址符和解引用符*。但是go语言禁止指针运算也就是指针无法偏移。
new和make
func new(Type) *Type返回值是指针接收参数是类型用于给指针分配内存空间
func new(Type) *Type返回值是值接收的第一个参数是类型不定长参数根据传入的类型不同而不同用于给切片映射表通道分配内存
new(int) // int指针
new(string) // string指针
new([]int) // 整型切片指针
make([]int, 10, 100) // 长度为10容量100的整型切片
make(map[string]int, 10) // 容量为10的映射表
make(chan int, 10) // 缓冲区大小为10的通道
函数
声明
通过func关键字直接声明通过var关键字来声明。
func sum(a int, b int) int {return a b
}var sum func(a int, b int) int {return a b
}go语言不支持函数重载。
其他基本和Javac一般就不再赘述这里只简单说一下不同
返回值
func Sum(a, b int) int {return a b
}
当没有返回值时并不需要将int改为void直接空着就行。
并且go允许有多个返回值需要用括号将返回值括起来。
func number(a, b int) (int , int) {
return a b, a - b
}
go语言也支持具名返回值但是不能与参数名重复使用具名返回时return可以不用指定返回值
func Sum(a, b int) (ans int){ans a breturn
}