# 通过派生宏`#[derive(Getter)]`为结构体字段生成`get`方法,字段可附加`#[get]`属性
> + 结构体只能是named struct
> + 方法名为字段名

`get`属性可选值

+ skip：bool类型，为true时，不为该字段生成`get`方法
+ pub:   bool类型，为true时，为该字段生成公有方法
+ default:  表达式，字段为非Option类型会忽略该字段

## 说明
### 字段为非`Option`类型
+ 字段类型为`基本数据类型`则，方法返回`基本数据类型`
+ 字段类型为`String`类型则，方法返回`&str`类型
+ 字段类型为`其它类型则`，方法返回`其它类型则`的引用

###  字段为`Option`类型

+ 字段包裹类型为`基本数据类型`，则，方法返回`基本数据类型`
+ 字段包裹类型为`String`类型，则，方法返回`&str`类型
+ 字段包裹类型为`其它类型`，则不生成该字段的`get`方法

## 示例

源代码

```rust
#[derive(Debug, Getter)]
struct GetterExample {
    #[get(pub, default = 1)]
    age: Option<u8>,
    name: String,
    #[get(pub, default = "tom")]
    nick_name: Option<String>,
    #[get(pub)]
    master_secret: Option<u32>,
    #[get(skip)]
    skip: bool,
    protocol: Protocol,
    protocol_option: Option<Protocol>,
}
#[derive(Debug, Clone, Copy)]
pub enum Protocol {
    Mysql,
    Postgres,
    Sqlite,
}

impl Default for Protocol {
    fn default() -> Self {
        Protocol::Mysql
    }
}
```

宏展开后的代码

```rust
impl GetterExample {
    #[inline(always)]
    pub fn age(&self) -> u8 { self.age.unwrap_or(1) }
    #[inline(always)]
    fn name(&self) -> &String { &self.name }
    #[inline(always)]
    pub fn nick_name(&self) -> &str { &self.nick_name.as_deref().unwrap_or("tom") }
    #[inline(always)]
    pub fn master_secret(&self) -> u32 { self.master_secret.unwrap_or_default() }
    #[inline(always)]
    fn protocol(&self) -> &Protocol { &self.protocol }
}
```

