工作之余,每天拿出点时间学习一门新技术,不求精通,但求了解其思想。通过下面途径学习的:
http://weiki.tk/Go_Web_Program/preface.html
从java转到golang的我,对于golang的变量定义确实不适应。golang的定义有些像javascript,用var 来定义变量。和java区别在于类型放到了后面。
bool
var isActive bool
其实这些都还是可以接受的,对我来讲,初次印象最别扭到地方是类型到名称。bool是布尔值,Go同时支持int和uint ,这两种类型其实长度相同,但是具体的长度要取决于不同到编译器的实现。
INT
golang中直接定义好位数的类型有rune(int32),int8,int16,int 32,int64和byte(uint8),uint8,uint16,uint32,uint64。和java中区别的还有类型之间到转换,我们知道 java中到类型转换是"向上"趋进的。但是在GO中
var a int8 var b int32 c:=a+b
以上到写法会产生错误。另外注意到是虽然int的长度是32bit,但是int和int32还是不可义互用的。
FLOAT
对于浮点类型,GO中没有float类型,他有float32和float64两种,默认是float64。
对了,GO中支持复数
var c complex64 = 5+5i //output: (5+5i) fmt.Printf("Value is: %v", c)
复数是由32位实数和32位虚数组成。RE + IMi
STRING
GO的字符串天生支持utf-8,当然它一旦定义,将不能改变。
//示例代码 var frenchHello string // 声明变量为字符串的一般方法 var emptyString string = "" // 声明了一个字符串变量,初始化为空字符串 func test() { no, yes, maybe := "no", "yes", "maybe" // 简短声明,同时声明多个变量 japaneseHello := "Ohaiou" // 同上 frenchHello = "Bonjour" // 常规赋值
字符串虽然不可以修改,但是可以通过切割来达到目的。
s := "hello" s = "c" + s[1:] // 字符串虽不能更改,但可进行切片操作 fmt.Printf("%s\n", s)
如果要声明多行的字符串,那么直接通过 `来声明。
m := `hello
world`
错误类型
Go内置有一个error
类型,专门用来处理错误信息,Go的package
里面还专门有一个包errors
来处理错误
err := errors.New("emit macho dwarf: elf header corrupted") if err != nil { fmt.Print(err) }
下面用一门书中到图来解释下:
另外还总结了一些技巧:
1.分组声明
声明多个常量,变量或者导入多个包时,可采用分组到方式进行
eg下面到代码:
import "fmt" import "os" const i = 100 const pi = 3.1415 const prefix = "Go_" var i int var pi float32 var prefix string
可以分组成如下形式:
import( "fmt" "os" ) const( i = 100 pi = 3.1415 prefix = "Go_" ) var( i int pi float32 prefix string )
iota枚举
还有一个比较有意思到关键词是iota,它是GO里面声明enum的时候采用的,它默认值是0,每调用一次加1.
const( x = iota // x == 0 y = iota // y == 1 z = iota // z == 2 w // 常量声明省略值时,默认和之前一个值的字面相同。这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用"= iota" ) const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0
十二点多了,今晚到此吧。
有疑问加站长微信联系(非本文作者)