Возможно ли повесить блокировку sync на структуру?
Не в Go.
В Go ты это должен явно проверять.
Можешь повесить Mutex внутрь, но проверять его все равно нужно. Внутри рядом с данными он, возможно, удобно хранится. Только и всего. Он автоматически работать не будет.
Можешь использовать lock-free идеологию. Тогда ничего сохранять не нужно. А сами данные и будут блокирующими элементами. Но и в этом случае нужно явно проверять их. Это пакет atomic в Go.
А вот если ты положишь структуру в канал, то тут да, тут ты получишь потокобезопасность. Но это не совсем то, что ты описал.
class MyClass
{
Lock _innerLockObject
SomeType _value
    public void SetSomeProp (SomeType value)
{
_innerLockObject.Lock()
_value = value;
_innerLockObject.Unlock() //defer
}

public SomeType GetSomeProp()
{
SomeType result;
_innerLockObject.Lock()
result = _value;
_innerLockObject.Unlock() //defer
return result;
}
}
Очень утрировано.
Вы об этом?