go语法
特点
Go
是一个书写简单的语言。与TypeScript
相比变量的类型表示,不需要加:
类型
var age int
var name string = "a"
var phoneNum,age int
var (
// 可以这么写但是如果可以推导推荐你不写
// name = "zhangsan"
name string = "zhangsan"
age int
sex string
)
//类型推导
name := "zhangsan"
name,nickName,age := "wang1","wang2",18
//基础类型
int,int8 uint8,-16,-32,-64
float32,float64
a := 1.2345123098
fmt.printf("%.4f",a)//1.2345
bool
string
//复合类型
//struct 结构体
//函数
//map
//Channel 通道
//接口
//Pointer 指针类型
类型断言
interface{}
可以理解为像js的{}
一样,是个万能的对象,可以代表一切。
如果要将interface{}
进行类型转换,那就是类型断言
var a interface{}=10
switch a.(type){
case int:
fmt.Println("int")
case float32:
fmt.Println("string")
}
// 输出 int
t,ok:= a.(int)
if ok{
fmt.Println("int",t)
}
// 输出 int 10
数组与切片
数组:js
的数组相比,是长度不可变的单一类型数组。
// var 变量名 [长度] 类型
var ages [3] int //声明
var name = [3] string {"张三","李四","王子"}// 初始化
banlance := [...]float32{100.0,1.0,34.0} // 自动判断长度初始化
userTages := [4]string{1:"开心",3:"失望"} // 只指定其中部分
// {}中元素个数不能大于[]
切片:是对数组的抽象
打印
fmt.printf("%v")
//"%v" -> 值
//"%T" -> 类型Type
//"%v" -> 值
常用格式如下
`%v`:默认格式
`%+v`:当输出结构体时,扩展标志会添加字段名
`%t`:单词true或false:
`%%`:百分号:
`%s`:直接输出字符串或者[]byte
`%q`:该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
数字
`%d`:十进制
`%f`:默认精度:
`%9f` 宽度:9 精度:默认
`%.2f` 宽度:默认 精度2
`%9.2f` 宽度:9 精度2
`%9.f` 宽度:9 精度0
`%b`:二进制
`%o`:八进制
十六进制:
`%x`:小写
`%x`:大写
`%p`:表示为十六进制,并加上前导的0x
其他:
`%#v`:Go语法
`%T`:值的类型的Go语法表示:
`%c`:该值对应的unicode码值
`%q`:该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
`%U`:表示为Unicode格式:U+1234,等价于"U+%04X"
测试
// 文件名必须为xxx_test.go
// 文件里的函数名必须为Testxxx
// 比如文件名为go_test.go
func TestTime(t *testing.T) {
nowtime := time.Now().Unix()
time := utils.GetCurZone00Unix(8) // 创建0点时间点
t.Logf("%v,%v,%t", nowtime, time, nowtime > time)
}
// 运行命令 进入要测试的
//go test -v -run TestTime ./go_test.go
基本结构
package main //包名
import "fmt" //导入fmt包,fmt 包实现了格式化 IO(输入/输出)的函数
func main() { //函数,注意这个"{"不能放在第二行
/* 这是另一种注释方式 */
fmt.Println("Hello, World!") //打印日志
}
golang特有规则
变量
//形式:var identifier type
//变量名为大写时 相当于public 可被外部调用
var Age int
//变量名为小写时 相当于protect 只能在包内使用
var age int
//声明带类型
var str string
var name string = "jiaowei"
var a, b int
var b, c int = 1, 2
//类型自动判断
var b = true //bool类型
// 更简单写法,最常用,只能用在函数体内不能用于全局(可以与下方对比)
name := "bob"
n1,n2 := 1,2
//还有种写法,一般用在全局变量上
var (
name string
age int
)
空白标识符
// _为空白标识符,只占位
package main
import "fmt"
func main() {
_,numb,strs := numbers() //只获取函数返回值的后两个
fmt.Println(numb,strs)
}
//一个可以返回多个值的函数
func numbers()(int,int,string){
a , b , c := 1 , 2 , "str"
return a,b,c
}
评论