【Go语言】Go语言的占位符

Go语言的占位符

Golang 的字符串占位符在 fmt 包的各种打印函数中使用,如 fmt.Printffmt.Sprintf

变量值与类型的打印

%v: 打印变量的值

  • %v 会根据变量的类型选择合适的格式进行打印。
  • 对于结构体,%v 会打印出结构体的字段。
  • 对于指针类型,会打印出指针指向的值。

%T: 打印变量的类型

  • %T 会打印出变量的具体类型。
x := 42
y := "hello"
z := 3.14
fmt.Printf("x: %v, 类型: %T\n", x, x)
fmt.Printf("y: %v, 类型: %T\n", y, y)
fmt.Printf("z: %v, 类型: %T\n", z, z)

运行如上代码,输出

x: 42, 类型: int
y: hello, 类型: string
z: 3.14, 类型: float64

整数

%d 十进制表示
%b 二进制表示
%o 八进制表示
%x%X 十六进制表示(%x 小写字母、%X 大写字母)

n := 42
fmt.Printf("十进制: %d\n", n)
fmt.Printf("二进制: %b\n", n)
fmt.Printf("八进制: %o\n", n)
fmt.Printf("十六进制(小写): %x\n", n)
fmt.Printf("十六进制(大写): %X\n", n)

运行如上代码,输出

十进制: 42
二进制: 101010
八进制: 52
十六进制(小写): 2a
十六进制(大写): 2A

浮点数和整数

%f 有小数点的十进制表示
%e%E 科学计数法
%g, %G: 根据情况选择 %f%e (%g 使用小写字母,%G 使用大写字母)

f := 3.1415926
fmt.Printf("浮点数: %f\n", f)
fmt.Printf("科学计数法(小写): %e\n", f)
fmt.Printf("科学计数法(大写): %E\n", f)

运行如上代码,输出

浮点数: 3.141593
科学计数法(小写): 3.141593e+00
科学计数法(大写): 3.141593E+00

字符串和字节切片

%s: 直接输出字符串或字节切片
%q: 使用双引号括起来的字符串
%x, %X: 每个字节用两字符的十六进制表示

s := "hello"
fmt.Printf("字符串: %s\n", s)
fmt.Printf("带引号的字符串: %q\n", s)
fmt.Printf("每个字节用十六进制表示(小写): %x\n", s)
fmt.Printf("每个字节用十六进制表示(大写): %X\n", s)

运行如上代码,输出

字符串: hello
带引号的字符串: "hello"
每个字节用十六进制表示(小写): 68656c6c6f
每个字节用十六进制表示(大写): 68656C6C6F

指针

%p: 指针地址

t := 100
p := &t
fmt.Printf("指针地址: %p\n", p)

运行如上代码,输出

指针地址: 0xc00001a128

布尔值

%t: 布尔值(truefalse

b := true
fmt.Printf("布尔值: %t\n", b)

运行如上代码,输出

布尔值: true

其他

%%: 字面上的百分号(%
%U: Unicode 格式:U+1234
%c: 字符(对应 Unicode 码点)
%v, %+v, %#v: 通用的占位符
%v: 值的默认格式表示
%+v: 类似 %v,但会打印结构体的字段名
%#v: 值的 Go 语言语法表示

fmt.Printf("百分号: 100%%\n")

// 定义如下 Unicode 字符
var char1 rune = 'A'
var char2 rune = '中'
var char3 rune = '😊'

// 使用 %U 格式化输出 Unicode 码点
fmt.Printf("char1: %c Unicode: %U\n", char1, char1)
fmt.Printf("char2: %c Unicode: %U\n", char2, char2)
fmt.Printf("char3: %c Unicode: %U\n", char3, char3)

type Person struct {
    Name string
    Age  int
}

person := Person{
    Name: "Alice",
    Age:  30,
}

fmt.Printf("值的默认格式表示: %v\n", person)
fmt.Printf("值带结构体的字段名表示: %+v\n", person)
fmt.Printf("值的Go语言语法表示: %#v\n", person)

运行如上代码,输出

百分号: 100%
char1: A Unicode: U+0041
char2: 中 Unicode: U+4E2D
char3: 😊 Unicode: U+1F60A
值的默认格式表示: {Alice 30}
值带结构体的字段名表示: {Name:Alice Age:30}
值的Go语言语法表示: main.Person{Name:"Alice", Age:30}
Go语言连接SQL Server数据库时,如果使用`?`作为占位符(用于PreparedStatement),有时候可能会遇到错误,这通常是由于驱动程序兼容性问题、SQL语法差异或者参数绑定方式不正确引起的。以下是可能遇到的一些常见问题: 1. **驱动问题**:确保你正在使用的go-sql-driver-mysql(不是原生支持SQL Server的,需要第三方库如go-sql-driver-mssql)与SQL Server版本兼容。 2. **数据类型转换**:如果你的SQL Server字段类型与Go的内置类型不匹配,比如字符串和整数,需要显式转换参数值。 3. **绑定参数**:在绑定占位符时,确保参数的数量和顺序与SQL语句中的占位符一致,并且是正确的数据类型。 4. **编码/解码**:如果涉及到字符串传递,可能需要处理字符集编码的问题,比如从UTF-8到SQL Server的字符编码。 解决此类问题的一般步骤包括: - 确认使用的驱动程序及其版本是否支持SQL Server。 - 检查参数绑定时是否有遗漏或者类型错误。 - 使用适当的函数进行数据类型转换或参数编码。 ```go import "github.com/denisenkom/go-mssqldb" // 示例连接字符串和查询 db, err := sql.Open("mssql", "user:password@tcp(localhost:1433)/dbname?driver=SQLServer&charset=utf8") if err != nil { // 处理错误... } stmt, err := db.Prepare("SELECT * FROM table WHERE column = ? AND other_column = ?"); if err != nil { // 处理错误... } defer stmt.Close() var result []map[string]interface{} params := []interface{}{"value", "another_value"} _, err = stmt.Query(params...) if err != nil { // 处理错误... } // 读取查询结果 for _, row := range result { // 处理每行数据... }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值