GitHub Copilot插件

正文开始前,先介绍一个小插件 - Copilot,是GitHub推出的一个AI代码补全插件。官网链接官方文档官方博客官方Twitter

目前GitHub学生认证账号可免费使用,GitHub学生认证GitHub学生认证申请

申请完许可之后直接到JetBrains插件市场搜索Copilot安装即可,JetBrains插件市场。安装完之后会连接GitHub进行认证,认证成功后就可以使用了。

用了大约有两周,感觉还不错,可以帮助我们快速生成代码,但是生成的代码不一定是最优的,需要我们自己再优化一下。目前Copilot只支持Python、Java、JavaScript、TypeScript、Go、Ruby、PHP、C#、C++、Kotlin、Scala、Dart、Swift、Rust、Julia、Elixir、Clojure、Haskell、OCaml、F#、Elm、Erlang、Prolog、Perl、Lua等

是的上面几行大部分内容也是生成的。。。我只写了个开头。本篇文章大概只有20%的内容是我敲出来的。因为我的博文一直在GoLand上写,所以以后可能会有更多AI生成的内容。

Golang的fmt占位符笔记

type Dog struct {
Name string
Age int
}

var dog = Dog{
Name: "小砾",
Age: 1,
}
本笔记后面部分为Copilot生成的代码,下图Gif是部分生成示例。仅供参考!

猜测可能是根据官方文档加上我上面的结构体的定义而生成的,官方文档链接

普通占位符

// %v 默认格式
fmt.Printf("%v", dog) // {小砾 1}
// %+v 打印结构体时,会添加字段名
fmt.Printf("%+v", dog) // {Name:小砾 Age:1}
// %#v 值的Go语法表示
fmt.Printf("%#v", dog) // main.Dog{Name:"小砾", Age:1}
// %T 打印值的类型
fmt.Printf("%T", dog) // main.Dog
// %% 打印%
fmt.Printf("%%") // %

布尔占位符

// %t true or false
fmt.Printf("%t", true) // true

整数占位符

// %b 二进制
fmt.Printf("%b", 10) // 1010
// %c 对应的Unicode码值
fmt.Printf("%c", 65) // A
// %d 十进制
fmt.Printf("%d", 10) // 10
// %o 八进制
fmt.Printf("%o", 10) // 12
// %q 单引号围绕的字符字面值,由Go语法安全地转义
fmt.Printf("%q", 65) // 'A'
// %x 十六进制,字母形式为小写 a-f
fmt.Printf("%x", 10) // a
// %X 十六进制,字母形式为大写 A-F
fmt.Printf("%X", 10) // A
// %U Unicode格式:U+1234,等同于 "U+%04X"
fmt.Printf("%U", 65) // U+0041

浮点数占位符

// %b 无小数部分、二进制指数的科学计数法,如 -123456p-78
fmt.Printf("%b", 10.1) // 1.0001100110011001100110011001100110011001100110011001101p+3
// %e 科学计数法,如 -1234.456e+78
fmt.Printf("%e", 10.1) // 1.010000e+01
// %E 科学计数法,如 -1234.456E+78
fmt.Printf("%E", 10.1) // 1.010000E+01
// %f 有小数点而无指数,如 123.456
fmt.Printf("%f", 10.1) // 10.100000
// %F %f的同义词
fmt.Printf("%F", 10.1) // 10.100000
// %g 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出
fmt.Printf("%g", 10.1) // 10.1
// %G 根据情况选择 %E 或 %F 以产生更紧凑的(无末尾的0)输出
fmt.Printf("%G", 10.1) // 10.1

字符串占位符

// %s 直接输出字符串或者[]byte
fmt.Printf("%s", "hello") // hello
// %q 带双引号的字符串,由Go语法安全地转义
fmt.Printf("%q", "hello") // "hello"
// %x 每个字节用两字符十六进制数表示(使用a-f)
fmt.Printf("%x", "hello") // 68656c6c6f
// %X 每个字节用两字符十六进制数表示(使用A-F)
fmt.Printf("%X", "hello") // 68656C6C6F

指针占位符

// %p 十六进制表示,前缀 0x
fmt.Printf("%p", &dog) // 0xc0000b4000

宽度标识符

// %n 宽度为n的整数,右对齐
fmt.Printf("%10d", 10) // 10
// %-n 宽度为n的整数,左对齐
fmt.Printf("%-10d", 10) // 10
// %0n 宽度为n的整数,右对齐,左边填充0
fmt.Printf("%010d", 10) // 0000000010

精度标识符

// %.nf 格式化浮点数,n表示小数点后的位数
fmt.Printf("%.2f", 10.1) // 10.10
// %e %E %f %F %g %G 的精度表示
fmt.Printf("%.2e", 10.1) // 1.01e+01

标志标识符

// %+d 带符号的整数
fmt.Printf("%+d", 10) // +10
// % d 带空格的整数
fmt.Printf("% d", 10) // 10
// %#x %#X 带0x/0X的十六进制
fmt.Printf("%#x", 10) // 0xa
fmt.Printf("%#X", 10) // 0XA
// %T 打印值的类型
fmt.Printf("%T", 10) // int
// %v 默认格式
fmt.Printf("%v", 10) // 10
// %b %d %o %x %X 的简写
fmt.Printf("%b", 10) // 1010
fmt.Printf("%d", 10) // 10
fmt.Printf("%o", 10) // 12
fmt.Printf("%x", 10) // a
fmt.Printf("%X", 10) // A
// %U Unicode格式:U+1234,等同于 "U+%04X"
fmt.Printf("%U", 65) // U+0041
// %c 对应的Unicode码值
fmt.Printf("%c", 65) // A
// %q 单引号围绕的字符字面值,由Go语法安全地转义
fmt.Printf("%q", 65) // 'A'
// %x %X 的简写
fmt.Printf("%x", "hello") // 68656c6c6f
fmt.Printf("%X", "hello") // 68656C6C6F
// %s %q %x %X 的简写
fmt.Printf("%s", "hello") // hello
fmt.Printf("%q", "hello") // "hello"
fmt.Printf("%x", "hello") // 68656c6c6f
fmt.Printf("%X", "hello") // 68656C6C6F
// %p 十六进制表示,前缀 0x
fmt.Printf("%p", &dog) // 0xc0000b4000
// %e %E %f %F %g %G 的简写
fmt.Printf("%e", 10.1) // 1.010000e+01
fmt.Printf("%E", 10.1) // 1.010000E+01
fmt.Printf("%f", 10.1) // 10.100000
fmt.Printf("%F", 10.1) // 10.100000
fmt.Printf("%g", 10.1) // 10.1
fmt.Printf("%G", 10.1) // 10.1