在 Go 语言中,原子包提供较低级别的原子内存,这有助于实现同步算法。 Go 语言中的Load()函数用于检查Store方法存储的最新值的值集。此外,如果没有为此Value调用 Store 方法,它也可以返回nil 。这个函数是在 atomic 包下定义的。在这里,您需要导入“sync/atomic”包才能使用这些功能。
句法:
func (v *Value) Load() (x interface{})
这里, v是任何类型的值, x是接口,它是 Load 和 Store 方法的输出结果类型。
注意: (*Value) 是指向Value类型的指针。同步/原子标准包中提供的值类型用于以原子方式加载和存储任何类型的值。
返回值:它返回存储方法存储的值集。如果没有调用 store 方法,也可以返回nil 。
示例 1:
// Program to illustrate the usage of
// Load function in Golang
// Including main package
package main
// importing fmt and sync/atomic
import (
"fmt"
"sync/atomic"
)
// Main function
func main() {
// Defining a struct type L
type L struct{ x, y, z int }
// Defining a variable to assign
// values to the struct type L
var r1 = L{9, 10, 11}
// Defining Value type to store
// values of any type
var V atomic.Value
// Calling Store function
V.Store(r1)
// Calling Load method
var r2 = V.Load().(L)
// Prints values as
// stored by recent
// store method
fmt.Println(r2)
// Displays true if satisfied
fmt.Println(r1 == r2)
}
输出:
{9 10 11}
true
在上面的例子中,我们使用了Value类型来存储任何类型的值。这些值存储在 r1 中,这是声明的接口。但是,可以使用 Load 方法返回这些值。
示例 2:
// Program to illustrate the usage of
// Load function in Golang
// Including main package
package main
// importing fmt and sync/atomic
import (
"fmt"
"sync/atomic"
)
// Main function
func main() {
// Defining a struct type L
type L struct{ x, y, z int }
// Defining a variable to assign
// values to the struct type L
var r1 = L{9, 10, 11}
// Defining Value type to store
// values of any type
var V atomic.Value
// Calling Load method
var r2 = V.Load().(L)
// Prints values as
// stored by recent
// store method
fmt.Println(r2)
// Displays true if satisfied
fmt.Println(r1 == r2)
}
输出:
panic: interface conversion: interface {} is nil, not main.L
goroutine 1 [running]:
main.main()
/tmp/sandbox731326366/prog.go:28 +0x240
这里,没有调用 store 方法,所以返回 nil。