%T :使用Go语法输出的值的类型
%v:使用默认格式输出的内置或者自定义类型的值,或者是使用其类型的String()方式输出的自定义值,如果该方法存在的话
%p:以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示
package main
import "fmt"
type dog struct {
name string
age int
sex int
}
func main() {
dog1 := new(dog)
dog1.name = "dog1"
dog1.age = 11
dog1.sex = -1
dog2 := dog1
fmt.Printf("%T %v %p\n", dog1, dog1, dog1)
fmt.Printf("%T %v %p\n", dog2, dog2, dog2)
dog2.name = "dog2"
dog2.age = 12
dog2.sex = 2
fmt.Printf("%T %v %p\n", dog1, dog1, dog1)
fmt.Printf("%T %v %p\n", dog2, dog2, dog2)
}
package main
import "fmt"
type dog struct {
name string
age int
sex int
}
func main() {
dog1 := dog{
name: "dog1",
age: 11,
sex: -1,
}
dog2 := &dog1
fmt.Printf("%T %v %p\n", dog1, dog1, dog1)
fmt.Printf("%T %v %p\n", dog2, dog2, dog2)
dog2.name = "dog2"
dog2.age = 12
dog2.sex = 2
fmt.Printf("%T %v %p\n", dog1, dog1, dog1)
fmt.Printf("%T %v %p\n", dog2, dog2, dog2)
}
package main
import (
"fmt"
"unsafe"
)
func main() {
slice_test := []int{1, 2, 3, 4, 5}
fmt.Println(unsafe.Sizeof(slice_test))
fmt.Printf("main:%#v,%#v,%#v\n", slice_test, len(slice_test), cap(slice_test))
slice_value(slice_test)
fmt.Printf("main:%#v,%#v,%#v\n", slice_test, len(slice_test), cap(slice_test))
slice_ptr(&slice_test)
fmt.Printf("main:%#v,%#v,%#v\n", slice_test, len(slice_test), cap(slice_test))
fmt.Println(unsafe.Sizeof(slice_test))
}
func slice_value(slice_test []int) {
slice_test[1] = 100 // 函数里的slice确实有被修改
slice_test = append(slice_test, 6) // 函数外的不变
fmt.Printf("slice_value:%#v,%#v,%#v\n", slice_test, len(slice_test), cap(slice_test))
}
func slice_ptr(slice_test *[]int) { // 这样才能修改函数外的slice
(*slice_test)[1] = 10
*slice_test = append(*slice_test, 7)
fmt.Printf("slice_ptr:%#v,%#v,%#v\n", *slice_test, len(*slice_test), cap(*slice_test))
}
package main
import "fmt"
type dog struct {
name string
age int
sex int
}
func main() {
dog1 := dog{
name: "dog1",
age: 11,
sex: -1,
}
dog2 := dog1
fmt.Printf("%T %v %p\n", dog1, dog1, dog1)
fmt.Printf("%T %v %p\n", dog2, dog2, dog2)
dog2.name = "dog2"
dog2.age = 12
dog2.sex = 2
fmt.Printf("%T %v %p\n", dog1, dog1, dog1)
fmt.Printf("%T %v %p\n", dog2, dog2, dog2)
}