V语言03基础映射
映射
mut m := map[string]int{} //串为键,整为值
m["one"] = 1
m["two"] = 2
println(m["one"]) // "1"
println(m["bad_key"]) // "0"
println("bad_key" in m) //用`in`来检查是否存在
m.delete("two")
映射的键可为串/整/浮/符文/空针.可简化为:
numbers := map{
"one": 1
"two": 2
}
println(numbers)
找不着,就返回零值.
sm := map{
"abc": "xyz"
}
val := sm["bad_key"]
println(val) // ""
intm := map{
1: 1234
2: 5678
}
s := intm[3]
println(s) // 0
万一映射的值就是0值,怎么办,该如何区分?
mm := map[string]int{}
val := mm["bad_key"] or { panic("找不到") }
//用or块来处理未找到.
//数组同样
arr := [1, 2, 3]
large_index := 999
val := arr[large_index] or { panic("出界") }
导入模块
import os
fn main() {
//从标入读文本
name := os.input("输入名字:")
println("你好, $name!")
}
可用os的公开定义(函数/常值/...).如输入.调用外部函数时,要指定模块.主要为了可读性/帮助理解(哪个模块.函数).不允许循环导入.
可选导入
import os { input }
fn main() {
//从标入读文本
name := input("输入名字:")
println("你好, $name!")
}
对常数不能这样,必须加(模块)前缀.多个:
import os { input, user_os }
name := input("输入名字:")
println("你好, $name!")
os := user_os()
println("你操系是:${os}.")
别名导入模块,只能别名模块:
import crypto.sha256
import mymod.sha256 as mysha256
fn main() {
v_hash := mysha256.sum("hi".bytes()).hex()
my_hash := mysha256.sum("hi".bytes()).hex()
assert my_hash == v_hash
}
你不能别名函数/类型,但你可再声明别名.
import time
import math
type MyTime = time.Time
fn (mut t MyTime) century() int {
return int(1.0 + math.trunc(f64(t.year) * 0.009999794661191))
}
fn main() {
mut my_time := MyTime{
year: 2020
month: 12
day: 25
}
println(time.new_time(my_time).utc_string())
println("世纪: $my_time.century()")
}
浙公网安备 33010602011771号