模块可以通过关键字 import
导入:
import os
fn main() {
// read text from stdin
name := os.input('Enter your name: ')
println('Hello, $name!')
}
上面代码中,导入过后程序就可以使用 os
模块中的所有公开声明内容,比如 input
函数。可以查看 standard library 进一步了解常用模块。
默认情况下,每次调用外部函数时都必须指定模块前缀。一开始这可能看起来很冗长,但它使代码更具可读性,更容易理解——这样调用哪个模块的哪个函数总是非常清晰。这在大型的代码库中非常有用。
循环导入模块是不允许的,就像 Go 里一样。
你可以直接导入模块中的特定函数与类型:
import os { input }
fn main() {
// read text from stdin
name := input('Enter your name: ')
println('Hello, $name!')
}
注意:这同样会将整个模块导入。并且不允许对常量如此操作——使用导入模块的常量必须带上前缀。
你可以一次性导入多个符号:
import os { input, user_os }
name := input('Enter your name: ')
println('Name: $name')
os := user_os()
println('Your OS is ${os}.')
任何导入的模块都可以用 as
关键字取别名。
注意:下面的例子中 mymod/sha256.v
模块并非内置,仅作例子展示,想要通过编译需要手动创建。
import crypto.sha256
import mymod.sha256 as mysha256
fn main() {
v_hash := sha256.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('Century: $my_time.century()')
}