初识golang
golang的变量和常量
//函数外声明并初始化变量 var test //错误 var test = "test" //ok,不需要写分号,不需要写类型 var test string = "test" //ok,写不写类型都OK test := "test" //错误,在函数外部不可以用:= //解释:":="这个符号是自动匹配类型,比如 a := 100,会把右边的类型和值传递到变量a,也就是说a的类型是int,值是100 //函数内声明并初始化变量 var testFunc = func() { var test2 //错误 var test = "test" //ok var test1 string = "test1" //ok test3 := "test3" //ok fmt.Println(test, test1, test2, test3) }
//变量块
var (
ErrParamError = "param error"
ErrParamEmpty = "param empty"
)
常量
const test//错误,没有初始化 const test = "test" //ok const test string = "test" //ok const test := "test" //错误 //常量块 const ( test = "test" Pi = 3.13 )
iota用法:iota默认为整型的空值0,之后的元素的值是它前一个元素的值+1
const ( Monday = iota Tuesday Wednesday Thursday Friday Saturday Sunday ) func main() { fmt.Println(Monday, Tuesday, Sunday) } 输出: 0 1 6
另外注意到:包的全局变量是可以只定义但是不使用的,而函数内的临时变量是定义后必须要使用的(作为参数,右值,或者右值的一部分)
//这段代码是OK的 var test = "test" func main() { } //这段代码是错误的 func main() { var test1 = "test1" //fmt.Println(test1) } //加上fmt是ok的 func main() { var test1 = "test1" fmt.Println(test1) }
数组:
代码 package main import "fmt" func main() { arr := make([]string, 5, 10) fmt.Println(len(arr), cap(arr)) return } 输出: 5 10 能看出来数组arr的长度是5,容量是10.这两个数字意味着什么呢? 代码 package main import "fmt" func main() { var temp string arr := make([]string, 5, 10) fmt.Println(len(arr), cap(arr)) arr[0] = "string0" arr[1] = "string1" arr[5] = "string5" return } 输出: 5 10 panic: runtime error: index out of range len(arr)=5意味着数组的最大长度是5,arr[5]这样的变量是不被允许的 cap(arr)=5不知道是啥意思
值类型,指针类型
package main import ( "fmt" ) var _ = fmt.Sprintf("") func main() { var a int = 10 fmt.Println(a) changeValue1(a) fmt.Println(a) fmt.Println(a) changeValue2(&a) fmt.Println(a) } func changeValue1(a int) { a++ } func changeValue2(a *int) { *a += 1 } 输出: 10 10 10 11
判断结构体是否被设置?
思路1:判断其中的元素是否为空元素;思路2:是否可以字节判断变量为空,目前是用第一种方法
package main import "fmt" type testStruct struct { Name string Age int } func main() { var t testStruct //t.Age = 100 if t.Name == "" { fmt.Println("name is empty") } else { fmt.Println("a" + t.Name + "a") } }
.....