标签: go

  • go语言fmt占位符

    • 通用

      %v the value in a default format
      when printing structs, the plus flag (%+v) adds field names
      %#v a Go-syntax representation of the value
      (floating-point infinities and NaNs print as ±Inf and NaN)
      %T a Go-syntax representation of the type of the value
      %% a literal percent sign; consumes no value

    • 布尔值

      %t the word true or false

    • 整型

      %b base 2
      %c the character represented by the corresponding Unicode code point
      %d base 10
      %o base 8
      %O base 8 with 0o prefix
      %q a single-quoted character literal safely escaped with Go syntax.
      %x base 16, with lower-case letters for a-f
      %X base 16, with upper-case letters for A-F
      %U Unicode format: U+1234; same as “U+%04X”

    • 浮点型

      %b decimalless scientific notation with exponent a power of two,
      in the manner of strconv.FormatFloat with the ‘b’ format,
      e.g. -123456p-78
      %e scientific notation, e.g. -1.234456e+78
      %E scientific notation, e.g. -1.234456E+78
      %f decimal point but no exponent, e.g. 123.456
      %F synonym for %f
      %g %e for large exponents, %f otherwise. Precision is discussed below.
      %G %E for large exponents, %F otherwise
      %x hexadecimal notation (with decimal power of two exponent), e.g. -0x1.23abcp+20
      %X upper-case hexadecimal notation, e.g. -0X1.23ABCP+20

      The exponent is always a decimal integer.
      For formats other than %b the exponent is at least two digits.

    • 字符串

      %s the uninterpreted bytes of the string or slice
      %q a double-quoted string safely escaped with Go syntax
      %x base 16, lower-case, two characters per byte
      %X base 16, upper-case, two characters per byte

    • 切片

      %p address of 0th element in base 16 notation, with leading 0x

    • 指针

      %p base 16 notation, with leading 0x
      The %b, %d, %o, %x and %X verbs also work with pointers,
      formatting the value exactly as if it were an integer.

    %v格式在不同类型下等效于:
    bool: %t
    int, int8 etc.: %d
    uint, uint8 etc.: %d, %#x if printed with %#v
    float32, complex64, etc: %g
    string: %s
    chan: %p
    pointer: %p

    对于复合对象,使用以下规则以递归方式打印元素

    struct:             {field0 field1 ...}
    array, slice:       [elem0 elem1 ...]
    maps:               map[key1:value1 key2:value2 ...]
    pointer to above:   &{}, &[], &map[]
    

    宽度由紧接在动词前面的可选十进制数指定。如果不存在,则宽度为表示值所需的任何值。精度由(可选)宽度后面的句点和十进制数指定。如果没有句点,则使用默认精度。没有后续数字的句点指定精度为零。示例:
    %f default width, default precision
    %9f width 9, default precision
    %.2f default width, precision 2
    %9.2f width 9, precision 2
    %9.f width 9, precision 0
    对于字符串,宽度的单位是unicode点位而不是字节。

    其它占位符

    '+' always print a sign for numeric values;
        guarantee ASCII-only output for %q (%+q)
    '-' pad with spaces on the right rather than the left (left-justify the field)
    '#' alternate format: add leading 0b for binary (%#b), 0 for octal (%#o),
        0x or 0X for hex (%#x or %#X); suppress 0x for %p (%#p);
        for %q, print a raw (backquoted) string if [strconv.CanBackquote]
        returns true;
        always print a decimal point for %e, %E, %f, %F, %g and %G;
        do not remove trailing zeros for %g and %G;
        write e.g. U+0078 'x' if the character is printable for %U (%#U)
    ' ' (space) leave a space for elided sign in numbers (% d);
        put spaces between bytes printing strings or slices in hex (% x, % X)
    '0' pad with leading zeros rather than spaces;
        for numbers, this moves the padding after the sign
    

    参考:
    https://pkg.go.dev/fmt

    Views: 0

  • 关于Go/OpenSSL对ECH的支持

    go stdlib中已经计划在go1.23中支持各户端的ECH,但是服务端的ECH支持要等到go1.24中,界时caddy也将能支持ECH,这样Caddy将成为第一个支持ECH功能的HTTP服务端。这个时间点大概是2025年2月,这个时候会发布go1.24。
    另外openssl 3.4将在2024年10月31日发布,openssl 3.4提供了QUIC的支持,界时nginx将能获取正式的HTTP/3功能(现在是实验性的支持)。
    openssl也正在合并ECH支持的PR,预计会合并到OpenSSL3.5版本中,OpenSSL3.5将会在2025年4月发布。也就是说在2025年上半年go标准库和openssl都会支持ECH,到时候nginx支持ECH应该也会很快。
    这个commit添加了server端的ech支持
    https://github.com/golang/go/commit/f69711434ae0ab383fb6088000736af9bd5638f4
    https://github.com/golang/go/milestone/212?closed=1
    https://github.com/golang/go/issues/32936 (服务端支持的讨论,已经列入proposal)
    https://github.com/golang/go/issues/68500
    https://github.com/orgs/golang/projects/17 (所有proposal)
    https://github.com/orgs/golang/projects/17/views/1?filterQuery=Encrypted+Client+Hello
    https://github.com/golang/go/issues/63369
    https://github.com/openssl/project/issues/52
    https://github.com/openssl/openssl/pull/22938
    https://github.com/openssl/openssl/milestone/48
    https://trac.nginx.org/nginx/milestone/nginx-1.27
    https://github.com/nginx/nginx/issues/266 nginx关于ech的issue
    https://github.com/yaroslavros/nginx/

    Views: 7