gitee.com/go-spring2/spring-base@v1.1.3/atomic/value.go (about) 1 /* 2 * Copyright 2012-2019 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package atomic 18 19 import ( 20 "sync/atomic" 21 ) 22 23 type MarshalValue func(interface{}) ([]byte, error) 24 25 // A Value provides an atomic load and store of a consistently typed value. 26 type Value struct { 27 _ nocopy 28 atomic.Value 29 30 marshalJSON MarshalValue 31 } 32 33 // SetMarshalJSON sets the JSON encoding handler for x. 34 func (x *Value) SetMarshalJSON(fn MarshalValue) { 35 x.marshalJSON = fn 36 } 37 38 // MarshalJSON returns the JSON encoding of x. 39 func (x *Value) MarshalJSON() ([]byte, error) { 40 return x.marshalJSON(x.Load()) 41 }