一,go的数据类型和操作符
1,布尔类型
go语言中bool 类型只有两个值:true和false;不像其它语言中0和1 也可以表示布尔类型,这在go语言中是不允许的,另外定义一个bool 类型,默认值为false
a. var b bool (默认为false)
b. var b bool = true
c. var b = true
2, 操作符
a. == 等于
b. != 不等于
c. !b 取反操作
d. && 与运算
e. || 或运算
布尔类型格式化输出占位符 %t
3,整数和浮点数类型
a. int8,int16,int32,int64 (有符号整数类型) 其中数字表示多少位
b. uint8,uint16,uint32,unit64 (无符号整数类型)
c. int 和 uint, 和操作系统平台有关
d. float32 和float64浮点数
注意:go 语言是强类型语言,其实int类型,不通字节之间也不能直接转化,例如: int8类型的变量,不能直接赋值int16
所有的整数初始化为0,所有的浮点数初始化为0.0,布尔类型初始化为false
4,复数类型
a,两种形式:complex64和complex128
b,var c complex64 = 5 +10i
c,内置函数complex(re,im)构造一个复数
d,万能输出占位符:%v
5,位操作
a,与操作:&
1 & 1 = 1;1 & 0 =0; 0 & 1 = 0;0 & 0 =0
b,或操作
1 | 1 = 1;1 | 0 =1;0 | 1 =1;0 & 0 =0
c, 异或操作
1 ^1 = 0;1 |0 =1;0 |1 =1; 0 & 0 =1
6,位操作符
a. 左移 << 1<< 10 = 1024
b. 右移 >> 1024 >> 10 = 1
7,操作符
a. 逻辑操作符, ==,!=,<,<=,>=
b. 算数操作符, +,-,*,、,%
二,go语言代码规范
1,在go 语言中任何一个代码文件隶属于一个包
2,import 关键字,引用其他包:
import("fmt")
导入多个包
import (
"fmt”
“os”
)
3,同一个包的函数调用,直接调用即可,要是导入其他包,需要加上包的名字+点+函数名称,例如 calc.add,calc 为报名,add 为其中的一个函数
4,包访问控制规则:
a.函数名或者变量开头字母大写,意味着这个函数或者变量,可以在其它源码中导入
b.函数名或者变量开头字符小写,意味着这个函数或者变量,不可以导出,为私有属性
5,每个源码文件可以含一个init 函数,这个init 函数自动被go运行的框架调用,示例
package main import ( "fmt" ) func init(){
fmt.Println("init called") } func main() { fmt.Println("main called") #先输出init called,最后输出main called }
6. 包的只初始化,不引用,在go 语言,一般情况下,一个包不引用,是不可以导入的,否则会编译出错,但是也有一种情况是可以导入包的,进行初始化,即在包名前加_
import (
_"add"
)
三,常量
1. 常量使用const修饰,而且永远只读,不能修改
2. const只能修饰boolean,number(int相关类型,浮点数,complex)和string
3. const的定义 const identifier [type] = value
4. 多个值定义 const(
a = 1
b = 2
c = 3
)
5. iota 字const 中的应用 iota 初始值为0,以后定义参数,如果附其它值,按顺序加1,遇到新的const iota 的值重置
package main import ( "fmt" ) const( a = iota b c ) const ( d = iota e ) func main(){ fmt.Printf("%d,%d,%d,%d,%d",a,b,c,d,e) } 输出为:0,1,2,0,1
6,在const 赋值中,如果某个变量没有赋值,那么他的值默认为上一个表达式的值
四,go语言中的内置包
1.time
func main() { now := time.Now() #获取当前时间 second :=now.Unix() #将当前时间转化成时间戳 }
2, os
a. 获取主机名
func main() { name,ret := os.Hostname() fmt.Printf("%s %v",name.err) }
b. 获取GoPATH
func main(){ val := os.Getenv("PATH") #os.Getenv 加变量参数 fmt.Printf("%s ",val) }
五,字符串
1,字符串声明
a. var b =string
b. var b = "hello"
c. var b string = "hello"
2. go 语言的引号
a. 双引号,“”,可以包含控制字符
b. 反引号,··,反引号字符都是原样输出
3. 字符串操作
a. 长度: len(str)
示例
func StrOperator() { str := "hello world" for index,val := range str { fmt.Printf("len:%d ",len(str)) } }
b. 拼接: +,fmt.Sprintf
str2 :=str + "world"
c. 分割: string.Split,返回一个数组
str="hello world" result := strings.Split(str," ") #已空格分割 fmt.Printf("result"%v ",result) #返回结果为数组
d. 包含: string.Contains
str="hello world" result := strings.Contains(str,"he") fmt.Printf("result"%v ",result) #返回true或者false
e. 前缀或后缀判断: strings.HasPrefix,strings.HasSuffix
str = "baidu.com" if ret := strings.HasPrefix(str4,"http://"); ret == false { str4 = "http://" + str }
f. 子串出现的位置: string.Index(),strings.Lastlndex()
g. join 操作: string.Join(a[]string,Sep string)
六,流控制语句
1. if 语句
if conditionl {
// do something
} else if condition2 {
// do something
} else {
}
2. if 语法糖
if b:=100;b> 200 {
// do something
}
3. for 循环
a 初始化 condition 修改
for init;condition;modify { }
b 无限循环
for { }
for true { }
c for 遍历字符串,数组,切片
for index,val :=range str {
}