go语法
导包
import(
"fmt"
)
Printf
格式化字符串并输出
func main() {
// %d 表示整型数字,%s 表示字符串
var stockcode=123
var enddate="2020-12-31"
var url="Code=%d&endDate=%s"
fmt.Printf(url,stockcode,enddate)
}
Go 语言中使用 fmt.Sprintf 格式化字符串并赋值给新串:
func main() {
// %d 表示整型数字,%s 表示字符串
var stockcode=123
var enddate="2020-12-31"
var url="Code=%d&endDate=%s"
var target_url=fmt.Sprintf(url,stockcode,enddate)
fmt.Println(target_url)
}
以上两段代码输出结果为
Code=123&endDate=2020-12-31
- %v
用%v可以输出任意类型的变量
fmt.Println("a=%v, b=%v\n", 1, 2)
可以用%+v来获取详细结果,用%#v获取更详细结果
变量与常量
-
变量
var a string = "Runoob" //声明并初始化
var a1 = "RUNOOB"
var b, c int = 1, 2
var c bool //bool的默认值为false
var e []int{1, 2, 3} //数组的声明并初始化
var a *int //go有指针
var a []int
var a map[string] int //[key] value
var a chan int //
var a func(string) int
var a error // error 是接口
简写:
intVal := 1
e := []int{1, 2, 3}
等于
var intVal int
intVal =1
var e []int{1, 2, 3}
-
常量
多个相同类型的声明可以简写为:
const c_name1, c_name2 = value1, value2
多重赋值
const a, b, c = 1, false, "str"
常量还可以用作枚举:
const (
Unknown = 0
Female = 1
Male = 2
)
- iota
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:
const (//枚举
a = iota
b
c
)
- 类型转换
string(a)
条件判断
-
if
golang的if后面不用加小括号 ,且必须加大括号
if a < 20 {...}
-
switch
两种写法
switch marks {
case 90:
fmt.Printf("good")
}
switch {
case marks == 90 :
fmt.Printf("good" )
}
切片
切片:可变长度的数组,类似于java的List
切片建立于数组之上,包含三个部分:指向的数组的地址、切片的长度、切片的容量
func main(){
s := make([]string, 3)//用make创建切片
s[0] = "a" //访问方式和数组一致
s.append(s,"d")//切片用append追加元素并赋值给原来的s
fmt.Printf(s[2:5]) //表示输出[2到5)
fmt.Printf(s[:5])
}
func main(){
s1 := make([]string, 3)//用make创建空切片
var arr [6]int = [6]int{1,2,3,4,5,6}
s2 := arr[1:3]//通过引用创建好的数组来创建切片
//切片可以被继续切片
s3 := []int{1,2,3}//在切片底层直接创建数组来创建切片
}
append发现s的容量不够会创建一个新切片,需要再赋值给原来的切片
可以用cap()函数来获取切片容量
可以使用copy()函数对切片进行复制,copy(a,b)是将b切片里下标对应的内容复制给a下标中的内容
map
- map[key]value
例:
m := make(map[string]int)
- 初始化:
m := make(map[string]int){"one":1,"two":2}
- 访问:
m["one"] = 1//写入
fmt.Println(m) // >>map[one:1 two:2]
fmt.Println(m[one])
- 删除
delete(m,"one")
访问时增加一个”ok“来判断是否
-
range
使用range遍历map(类似于java的Entry)
for k,v := range m {
fmt.Println(k, v) // >>one 1; two 2
}
for k := range m{
fmt.Println(k) // >>one; two
}
使用range遍历普通数组
nums := []int{2,3,4}
for i,num := range nums{
//i是下标
//num是内容
}
不需要索引时可以用下划线替代