区块链研发工程师
Go服务器端/游戏软件工程师
golang分布式/云计算软件工程师
先know how ,在know why
Golang的语言特点注意事项
以"go" 为扩展名
执行入口是main()函数
严格区分大小写
每个语句后面不带分号
定义的变量和import的包如果没有使用到,代码不能编译通过
shift+tab整体向左移动
使用一个表达式形容Go语言: Go=C+Python
print() println() //print+line printf() //print+format %T , 打印变量的数据类型 %d , 打印整数,十进制 %f , 打印浮点,小数 %t , 打印字符串 %s , 打印字符串 %v , 原样输出 %c , 打印对应的unicode字符 %p , 打印地址 变量的定义
var 变量 数据类型
变量名=赋值
缩写成一行
var 变量名 数据类型=赋值
类型推断
var 变量名=赋值
省略var
变量: =赋值
b:=2 //简短声明不支持全局变量
在同一区域同一数据类型内不断变化的
var num int //默认为0 跟js差不多 undefined
_ 只写,不能读
常量const 常量 数据类型=赋值
const 常量名=赋值
所有的字母大写
如果私有 前加小写字符c
一组常量中,如果某个常量没有初始值,那么默认和上一行一致
iota:计数器 默认为0
const( e=iota f g ) //每当定义一个常量累加1 整型int uint 和操作系统有关
浮点float32单精度 float64 双精度
字符串一个字符byte
Go语言字符使用UTF-8 英文字符1个字节 汉字3个字节
字符串一旦赋值了,就不能在修改
反引号是直接输出``
布尔(bool)只能取true false不能取0,1 占用一个字节
Go在不同类型的变量之间赋值是需要显式转换,也就是说Golang中数据类型不能自动转换
var i int32 = 100 var n1 float32 = float32(i) var n2 int8 = int8(i) var n3 int64 = int64(i) fmt.Print("i=%v n1=%v n2=%v n3=%v", i, n1, n2, n3) %v 需要转换的变量基本数据类型 的默认值
基本类型转string类型
fmt.Sprintf 会返回转换后的字符串
strconv.FormatFloat
strconv.FormatInt
strconv.formatbool
string类型转基本数据类型
strconv ParseInt() ParseFloat() ParseBool() ParseUint() n1,_=strconv.ParseInt(str2,10,64) f1,_=strconv.ParseFloat(str3,64)
算术运算符
对于除号"http://www.likecs.com/" 只保留整数部分而舍弃小数部分
Golang的自增自减只能当作一个独立语言使用
例如 i++ i-- ++和--只能写在变量的后面,不能写在变量的前面go 语言明确不支持三元运算符
键盘输入语句
fmt.Scanln() fmt.Scanf()
fmt.scanf可以按照指定的格式输入
fmt.Scanf("%s,%d,%f,%t",&name,&age,&sal,&ispass)通过&变量保存数据
fmt.Scanln(&name)
if x>y { fmt.Println("true") } if else if /*希望函数内的变量能改变函数外的数值,可以传入变量的地址& 函数内以指针的方式操作变量*/ func test03(n1 *int) { *n1=*n1+10 fmt.Println("test03 n1=",*n1) } func main(){ num:=20 test03(&num) fmt.Println("main() num",num) }go函数不支持重载
自定义数据类型type 自定义数据类型 数据类型
type myInt int var num1 myInt var num2 int num1=400 num2=int(num1) //这里依然需要显示转换,go认为myInt和int两个类型args是slice切片,通过args[index] 可以访问各个值
func sum(n1 int,args... int)int{ sum:=n1 for i:=0;i<len(args);i++{ sum+=args[i]//args[0] 表示取出args切片的第一个元素之 } return sum } func main(){ res:=sum(1,2,3,4,5,5,6,6) fmt.Println("res=",res) }每一个源文件都可以 包含一个init函数,init会在main函数前调用
执行顺序
bufio包
reader:=NewReader(os.Stuio) reader.ReadLine()====>[]byte reader.ReadString('\n')-->String内置包
math包提供数学计算的函数
math.Abs()
go语言特有