[go语言 golint警告]redundant type from array, slice, or map composite literal

**问题:**碰到golint 提示redundant type from array, slice, or map composite literal
翻译:数组、切片或映射复合文字中的冗余类型。

原因

var foo = map[int][]int{
	0: []int{1, 2},
	1: []int{1, 2},
}

如上面代码改所示,foo的类型已经通过声明知道是map[int][]int
很明显,foo的键值对中的值一定为[]int,所以不需要 额外声明键值对中的值的类型。直接使用{},而不是[]int{}
解决做法:

var foo = map[int][]int{
	0: {1, 2},
	1: {1, 2},
}

去除掉多余的类型声明,解决了golint报错的问题。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于H.264标准的slice header解析代码示例,可以用来判断当前slice的帧类型: ```c++ typedef struct { int first_mb_in_slice; int slice_type; int pic_parameter_set_id; int frame_num; int field_pic_flag; int bottom_field_flag; int idr_pic_id; int pic_order_cnt_lsb; int delta_pic_order_cnt_bottom; int delta_pic_order_cnt0; int delta_pic_order_cnt1; int redundant_pic_cnt; int direct_spatial_mv_pred_flag; int num_ref_idx_active_override_flag; int num_ref_idx_l0_active_minus1; int num_ref_idx_l1_active_minus1; int cabac_init_idc; int slice_qp_delta; int sp_for_switch_flag; int slice_qs_delta; int disable_deblocking_filter_idc; int slice_alpha_c0_offset_div2; int slice_beta_offset_div2; int slice_group_change_cycle; } slice_header_t; int get_slice_type(slice_header_t *slice_header) { int slice_type = slice_header->slice_type; if (slice_type == 0 || slice_type == 5) { return I_SLICE; } else if (slice_type == 1 || slice_type == 6) { return P_SLICE; } else if (slice_type == 2 || slice_type == 7) { return B_SLICE; } else if (slice_type == 3 || slice_type == 8) { return SP_SLICE; } else if (slice_type == 4 || slice_type == 9) { return SI_SLICE; } else { return -1; } } int parse_slice_header(uint8_t *data, slice_header_t *slice_header) { bitstream_t bs; init_bitstream(&bs, data); slice_header->first_mb_in_slice = read_ue(&bs); slice_header->slice_type = read_ue(&bs); slice_header->pic_parameter_set_id = read_ue(&bs); slice_header->frame_num = read_bits(&bs, 16); slice_header->field_pic_flag = read_bits(&bs, 1); if (slice_header->field_pic_flag) { slice_header->bottom_field_flag = read_bits(&bs, 1); } if (slice_header->nal_unit_type == NAL_IDR_SLICE) { slice_header->idr_pic_id = read_ue(&bs); } if (slice_header->pic_order_cnt_type == 0) { slice_header->pic_order_cnt_lsb = read_bits(&bs, slice_header->log2_max_pic_order_cnt_lsb_minus4 + 4); if (slice_header->delta_pic_order_always_zero_flag) { slice_header->delta_pic_order_cnt_bottom = 0; slice_header->delta_pic_order_cnt0 = 0; slice_header->delta_pic_order_cnt1 = 0; } else { if (slice_header->delta_pic_order_cnt_bottom_exist) { slice_header->delta_pic_order_cnt_bottom = read_se(&bs); } if (slice_header->delta_pic_order_cnt0_exist) { slice_header->delta_pic_order_cnt0 = read_se(&bs); } if (slice_header->delta_pic_order_cnt1_exist) { slice_header->delta_pic_order_cnt1 = read_se(&bs); } } } else if (slice_header->pic_order_cnt_type == 1) { // TODO: implement } slice_header->redundant_pic_cnt = read_ue(&bs); if (is_slice_type_B(slice_header->slice_type)) { slice_header->direct_spatial_mv_pred_flag = read_bits(&bs, 1); } if (is_slice_type_P(slice_header->slice_type) || is_slice_type_SP(slice_header->slice_type) || is_slice_type_B(slice_header->slice_type)) { slice_header->num_ref_idx_active_override_flag = read_bits(&bs, 1); if (slice_header->num_ref_idx_active_override_flag) { slice_header->num_ref_idx_l0_active_minus1 = read_ue(&bs); if (is_slice_type_B(slice_header->slice_type)) { slice_header->num_ref_idx_l1_active_minus1 = read_ue(&bs); } } } if (slice_header->slice_type == 2 || slice_header->slice_type == 4 || slice_header->slice_type == 7 || slice_header->slice_type == 9) { slice_header->sp_for_switch_flag = read_bits(&bs, 1); } if (slice_header->slice_type == 1 || slice_header->slice_type == 6 || slice_header->slice_type == 3 || slice_header->slice_type == 8) { slice_header->slice_qs_delta = read_se(&bs); } if (slice_header->use_default_scaling_matrix_flag) { // TODO: implement } else { // TODO: implement } if (slice_header->disable_deblocking_filter_idc != 1) { slice_header->slice_alpha_c0_offset_div2 = read_se(&bs); slice_header->slice_beta_offset_div2 = read_se(&bs); } if (slice_header->slice_group_map_type >= 3 && slice_header->slice_group_map_type <= 5) { // TODO: implement } if (slice_header->slice_group_change_direction_flag) { slice_header->slice_group_change_rate_minus1 = read_ue(&bs); } if (slice_header->slice_group_change_direction_flag || (slice_header->slice_group_change_cycle != 0 && slice_header->pic_parameter_set_id == 0)) { // TODO: implement } return 0; } ``` 在这个代码示例中,我们定义了一个slice_header_t结构体来保存slice header中的各个参数。然后我们实现了一个parse_slice_header函数,用来解析slice header中各个参数的值。最后,我们定义了一个get_slice_type函数来根据slice_header中的slice_type参数来判断当前slice的帧类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值