Go语言起步——hello world
1.创建项目,在项目入口(main函数中)
package main
import "fmt"
func main() {
fmt.Println("hello world!")
}
输出:
hello world!
Process finished with exit code 0
字符串
package main
import "fmt"
func main() {
s := "hello"
fmt.Println(s)
}
输出:
hello
Process finished with exit code 0
字符串是用一对双引号包裹的
字符是用一对单引号包裹的。
修改字符串
package main
import "fmt"
func main() {
s := "hello"
c := []byte(s)
c[0] = 'c'
s2 := string(c)
fmt.Println(s2)
}
输出:
cello
Process finished with exit code 0
这里要注意的是 修改字符串不能直接赋值修改,而需要先将其转换成
[]rune
或[]byte
,完成后再转换为string
。
无论哪种转换,都会重新分配内存,并复制字节数组。
修改字符串也可以这样:
package main
import "fmt"
func main() {
s := "hello"
s = "c" + s[1:] // 字符串虽不能更改,但可进行切片操作
fmt.Println(s)
}
输出的结果相同:
cello
Process finished with exit code 0
声明多行的字符串
package main
import "fmt"
func main() {
s3 := `hello
world`
fmt.Println(s3)
}
输出:
hello
world
Process finished with exit code 0
多行字符串,是用
反引号
,原样输出字符串。
错误类型
package main
import (
"errors"
"fmt"
)
func main() {
err :=errors.New("我是一个错误信息!")
if err != nil {
fmt.Println(err)
}
}
输出:
我是一个错误信息!
Process finished with exit code 0
Go内置有一个error类型,专门用来处理错误信息,Go的package里面还专门有一个包errors来处理。
数组
数组的声明:
//全局变量
var arr[len]type //初始化变量
var arr1=[len]type {v1,v1,v3,v4,……} //初始化变量并赋值
var arr3,arr4 [len]type
var arr5 = [...]type {v1,v2,v3,v4,……} //通过... 在初始化赋值时自动确定数组长度
//局部变量
arr := [len]type//可以这样
这是数组(
array
)的声明,大多数情况下声明的数组为切片(slice
)也叫动态数组。
切片(slice
)的长度是不固定的,并且切片(slice
)总是指向一个底层arrary
切片(slice
)的声明可以像array
一样,只是不需要长度。
声明数组,如果初始化数组赋值的个数小于数组初始化的长度,则缺值用0补齐。
package main
import "fmt"
var slice1 =[5]int{1,2,4}
func main() {
fmt.Println(slice1)
}
输出:
[1 2 4 0 0]
Process finished with exit code 0
map
也就是Python中字典的概念,它的格式为
map[keyType]valueType
注意:
map
是无序的,每次打印出来的map都会不一样,它不能通过index
获取,而必须通过key
获取。map
的长度是不固定的,也就是和slice
一样,也是一种引用类型。- 内置的
len
函数同样适用于map
,返回map
拥有的key
的数量。 map
的值可以很方便的修改,通过numbers["one"]=11
可以很容易的把key
为one
的字典值改为11
。map
和其他基本型别不同,它不是thread-safe
,在多个go-routine
存取时,必须使用mutex lock
机制。
map
有两个返回值,第二个返回值是判断key
是否存在。
make和new
1.make
make
用于内建类型(map
、slice
、channel
)的内存分配。返回一个有初始值(非零)的T
类型,而不是*T
make
返回初始化后的(非零)值
2.new
new
用于各种类型的内存分配。
内建函数new
:new(T)
分配了零值填充的T
类型的内存空间,并且返回其地址,即一个*T
类型的值,即 它返回一个指针,指向新分配的类型T
的零值。
new
返回指针