西安有哪些网站建设外包公司,wordpress怎么插视频,中山网上办事大厅,佛山高端网站建设文章目录Go语言基础语法标识符与关键字操作符与表达式变量、常量、字面量变量类型变量声明变量初始化常量字面量变量作用域注释与godoc注释的形式注释的位置go docgodocGo语言基础语法
标识符与关键字 go变量、常量、自定义类型、包、函数的命名方式必须遵循以下规则#xff…
文章目录Go语言基础语法标识符与关键字操作符与表达式变量、常量、字面量变量类型变量声明变量初始化常量字面量变量作用域注释与godoc注释的形式注释的位置go docgodocGo语言基础语法
标识符与关键字 go变量、常量、自定义类型、包、函数的命名方式必须遵循以下规则
首字符可以是任意Unicode字符或下划线。首字符之外的部分可以是Unicode字符、下划线或数字。名字的长度无限制。 理论上名字里可以有汉字甚至可以全是汉字但实际中不要这么做。 Go语言关键字
break default func interface select case defer go map struct chan else goto package switch const if range type continue for import return fallthrough var常量
true false iota nil 数据类型
int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error函数
make len cap new append copy close delete complex real imag panic recover操作符与表达式
算法术运算符
运算符描述相加-相减*相乘/相除%求余
//arithmetic 算术运算
func arithmetic() {var a float32 8var b float32 3var c float32 a bvar d float32 a - bvar e float32 a * bvar f float32 a / bfmt.Printf(a%.3f, b%.3f, c%.3f, d%.3f, e%.3f, f%.3f\n, a, b, c, d, e, f)
}关系运算符
运算符描述检查两个值是否相等如果相等返回 True 否则返回 False!检查两个值是否不相等如果不相等返回 True 否则返回 False检查左边值是否大于右边值如果是返回 True 否则返回 False检查左边值是否大于等于右边值如果是返回 True 否则返回 False检查左边值是否小于右边值如果是返回 True 否则返回 False检查左边值是否小于等于右边值如果是返回 True 否则返回 False
//relational 关系运算符
func relational() {var a float32 8var b float32 3var c float32 8fmt.Printf(ab吗 %t\n, a b)fmt.Printf(a!b吗 %t\n, a ! b)fmt.Printf(ab吗 %t\n, a b)fmt.Printf(ab吗 %t\n, a b)fmt.Printf(ac吗 %t\n, a b)fmt.Printf(ac吗 %t\n, a c)
}逻辑运算符
运算符描述逻辑 AND 运算符。 如果两边的操作数都是 True则为 True否则为 False||逻辑 OR 运算符。 如果两边的操作数有一个 True则为 True否则为 False!逻辑 NOT 运算符。 如果条件为 True则为 False否则为 True
//logistic 逻辑运算符
func logistic() {var a float32 8var b float32 3var c float32 8fmt.Printf(ab bc吗 %t\n, a b b c)fmt.Printf(ab || bc吗 %t\n, a b || b c)fmt.Printf(ab不成立对吗 %t\n, !(a b))fmt.Printf(bc不成立对吗 %t\n, !(b c))
}位运算符
运算符描述参与运算的两数各对应的二进位相与两位均为1才为1|参与运算的两数各对应的二进位相或两位有一个为1就为1^参与运算的两数各对应的二进位相异或当两对应的二进位相同时为0不同时为1。作为一元运算符时表示按位取反符号位也跟着变左移n位就是乘以2的n次方。ab是把a的各二进位全部左移b位高位丢弃低位补0。通过左移符号位可能会变右移n位就是除以2的n次方。ab是把a的各二进位全部右移b位正数高位补0负数高位补1
//bit_op 位运算
func bit_op() {fmt.Printf(os arch %s, int size %d\n, runtime.GOARCH, strconv.IntSize) //int是4字节还是8字节取决于操作系统是32位还是64位var a int32 260fmt.Printf(260 %s\n, util.BinaryFormat(a))fmt.Printf(-260 %s\n, util.BinaryFormat(-a)) //负数用补码表示。在对应正数二进制表示的基础上按拉取反再末位加1fmt.Printf(2604 %s\n, util.BinaryFormat(a4))fmt.Printf(260|3 %s\n, util.BinaryFormat(a|3))fmt.Printf(260^7 %s\n, util.BinaryFormat(a^7)) //^作为二元运算符时表示异或fmt.Printf(^-260 %s\n, util.BinaryFormat(^-a)) //^作为一元运算符时表示按位取反符号位也跟着变fmt.Printf(-26010 %s\n, util.BinaryFormat(-a10)) //正数高位补0负数高位补1fmt.Printf(-2603 %s\n, util.BinaryFormat(-a3)) //负数左移可能变成正数//go语言没有循环无符号左/右移符号
}赋值运算符
运算符描述简单的赋值运算符将一个表达式的值赋给一个左值相加后再赋值-相减后再赋值*相乘后再赋值/相除后再赋值%求余后再赋值左移后赋值右移后赋值按位与后赋值|按位或后赋值^按位异或后赋值
//assignment 赋值运算
func assignment() {var a, b int 8, 3a bfmt.Printf(ab %d\n, a)a, b 8, 3a - bfmt.Printf(a-b %d\n, a)a, b 8, 3a * bfmt.Printf(a*b %d\n, a)a, b 8, 3a / bfmt.Printf(a/b %d\n, a)a, b 8, 3a % bfmt.Printf(a%%b %d\n, a) //%在fmt里有特殊含意所以需要前面再加个%转义一下a, b 8, 3a bfmt.Printf(ab %d\n, a)a, b 8, 3a bfmt.Printf(ab %d\n, a)a, b 8, 3a bfmt.Printf(ab %d\n, a)a, b 8, 3a | bfmt.Printf(a|b %d\n, a)a, b 8, 3a ^ bfmt.Printf(a^b %d\n, a)
}变量、常量、字面量
变量类型
类型go变量类型fmt输出整型int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64%d浮点型float32 float64%f %e %g布尔型bool%t指针uintptr%p引用map slice channel%v字节byte%c任意字符rune%c字符串string%s错误error%v
变量声明 Go语言变量必须先声明再使用所谓使用指读取或修改。 标题声明
var name string
var age int
var isOk bool批量声明
var ( name string age int isOk bool
)变量初始化 如果声明后未显式初始化数值型初始化0字符串初始化为空字符串布尔型初始化为false引用类型、函数、指针、接口初始化为nil。
var a stringchina //初始化一个变量
var achina //类型推断为string
var a,b int3,7 //初始化多个变量
var a,bchina,7 //初始化多个变量每个变量都单独地执行类型推断 函数内部的变量(非全局变量)可以通过:声明并初始化。
a:3下划线表示匿名变量。匿名变量不占命名空间不会分配内存因此可以重复使用。
_24常量 常量在定义时必须赋值且程序运行期间其值不能改变。
const PI float323.14const(PI3.14E2.71
)const(a100b //100跟上一行的值相同c //100跟上一行的值相同
)iota
const(aiota //0b //1c //2d //3
)const(aiota //0b //1_ //2d //3
)const(aiota //0b30 ciota //2d //3
)const(_iota // iota 0KB1(10* iota) // iota 1MB1(10* iota) // iota 2GB1(10* iota) // iota 3TB1(10* iota) // iota 4
)const(a,biota1, iota2 //1,2 iota 0c,d //2,3 iota 1e,f //3,4 iota 2
)字面量 字面量–没有出现变量名直接出现了值。基础类型的字面量相当于是常量。
fmt.Printf(%t\n, 04 4.00) //用到了整型字面量和浮点型字面量
fmt.Printf(%v\n, .4i) //虚数字面量 0.4i
fmt.Printf(%t\n, \u4f17 众) //Unicode和rune字面量
fmt.Printf(Hello\nWorld\n!\n) //字符串字面量变量作用域 对于全局变量如果以大写字母开头所有地方都可以访问跨package访问时需要带上package名称如果以小写字母开头则本package内都可以访问。 函数内部的局部变量仅本函数内可以访问。{}可以固定一个作用域。内部声明的变量可以跟外部声明的变量有冲突以内部的为准–就近原则。
var (A3 //所有地方都可以访问b4 //本package内可以访问
)func foo(){b:5 //本函数内可以访问{b:6 //本作用域内可以访问}
}注释与godoc
注释的形式
单行注释以//打头。多行注释有2种形式 连续多行以//打头注意多行注释之间不能出现空行。在段前使用/*段尾使用*/。 注释行前加缩进即可写go代码。注释中给定的关键词。NOTE: 引人注意TODO: 将来需要优化Deprecated: 变量或函数强烈建议不要再使用。
//Add 2个整数相加
//返回和。
//
//NOTE: 注释可以有多行但中间不能出现空行仅有//不算空行。
func Add(a, b int) int {return a b
}/*
Sub 函数使用示例for i:0;i3;i{Sub(i1, i)}
看到了吗只需要行前缩进注释里就可以写go代码是不是很简单。
*/
func Sub(a, b int) int {return a - b
}//TODO: Prod 该函数不能并发调用需要优化
func Prod(a, b int) int {return a * b
}//Deprecated: Div 不要再调用了
func Div(a, b int) int {return a / b
}注释的位置 针对行的注释在行上方或右侧。函数的上方在func xxx()上方。结构体的注释在type xxx struct上方。包注释在package xxx的上方。一个包只需要在一个地方写包注释通常会专门写一个doc.go里面只有一行package xxx和关于包的注释。
// FormatBool, FormatFloat, FormatInt, and FormatUint convert values to strings:
//
// s : strconv.FormatBool(true)
// s : strconv.FormatFloat(3.1415, E, -1, 64)
// s : strconv.FormatInt(-42, 16)
// s : strconv.FormatUint(42, 16)
package fmtgo doc go doc是go自带的命令。
go doc entrance_class/util上述命令查看entrance_class/util包的注释。
godoc godoc是第三方工具可以为项目代码导出网页版的注释文档。安装godoc命令如下
go get -u golang.org/x/tools/cmd/godoc
go install golang.org/x/tools/cmd/godoclatest启动http服务
godoc -http:6060用浏览器访问http://127.0.0.1:6060 可以查看go标准库的文档。