写法一:
var a int=1 或者 var a =1 可以包内全局声明
go的写法熟悉javascript的会想到 var a =1 这种变量声明和赋值
int 代表a的数据类型 如果懂得typescript的也能大体知道是给当前参数类型
写法二:
a :=1 省略var和类型
重新赋值 a =3
这是一种简写的形式,像go这种静态语言可以通过值来推导类型,跟typescript类型推导一样
常量写法与javascript相同
const PI =3.1415
枚举
const(
SUCCESS =iota(iota代表行累加器 默认值为0后面内容原有值基础上加1 如果SUCCESS给予其它类型布尔,数字,字符串,Fail未赋值取上级的结果)
Fail
)
var a =int(float32(1.3)) 静态语言只支持强制类型转换,但要注意精度丢失,所以可以使用内置strconv包进行类型转换
4.逻辑判断
if 判断可以不需要()但花括号不允许换行
a :=true
b :=falseif a && b {
fmt.Println("true")}else{
fmt.Println("false")}if a || b {
fmt.Println("true")}else{
fmt.Println("false")}
a =false
b =trueif!(a && b){
fmt.Println("true")}else{
fmt.Println("false")}
swich 不需要像其他语言那样加入breakconst(
SUCCESS =iota+1
FAIL
APPROVAL
)
status :=1switch status {case SUCCESS:
fmt.Println("success")case FAIL:
fmt.Println("fail")case APPROVAL:
fmt.Println("approval")default:
fmt.Println("no found")}
for循环在数组、map、携程都用到没有其它语言还有while
for i :=0; i <10; i++{
fmt.Println(i)}
这种写法代替while, 在之后学到的携程种会一直接触
for{break}
5. 函数
函数式编程现在在很多语言中流行,以及有多个返回值,使用很多包时都会有errornil 的判断
funcadd(fn func(a, b int)(int,int))(int,string){
t1, t2 :=fn(1,2)return t1, strconv.Itoa(t2)}funcmain(){
t1, t2 :=add(func(a, b int)(int,int){return a + b, b
})
fmt.Println(t1, t2)}funcmain(){
i, err := strconv.Atoi("1")if err !=nil{
fmt.Println("error")}else{
fmt.Println("i", i)}}
以下是两个代码片段 golang 是值传递,要么传字面值或者传地址值(看上去是类似其它语言引用传递)
指针类型存的是变量内存地址,通过内存地址去改变变量的值
片段一:
funcswap(a, b int){
a, b = b, a
}funcmain(){
a :=1
b :=2swap(a, b)
fmt.Println(a, b)// 1 2}
片段二:
funcswap(a, b *int){*a,*b =*b,*a
}funcmain(){
a :=1
b :=2swap(&a,&b)
fmt.Println(a, b)// 2 1}